Giả sử chúng ta có một số n. Ta phải tìm số m nhỏ nhất sao cho giai thừa của m có ít nhất n số 0.
Vì vậy, nếu đầu vào là n =2, thì đầu ra sẽ là 10 vì 10! =3628800 và 9! =362880, số tối thiểu có 2 số không là 10.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- Xác định một hàm count_fives (). Điều này sẽ mất n
- cnt:=0
- while n> 0, do
- n:=tầng của (n / 5)
- cnt:=cnt + n
- trả về cnt
- Từ phương pháp chính, hãy thực hiện như sau -
- trái:=1
- đúng:=5 ^ 24
- trong khi phải - trái> 5, thực hiện
- giữa:=tầng của ((phải + trái) / 10) * 5
- fives:=count_fives (giữa)
- nếu fives giống với n, thì
- right:=mid
- left:=right - 5
- ra khỏi vòng lặp
- ngược lại khi fives
- left:=mid
- nếu không,
- right:=mid
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
def count_fives(n):
cnt = 0
while n > 0:
n = n // 5
cnt += n
return cnt
def solve(n):
left = 1
right = 5**24
while right - left > 5:
mid = int((right + left) / 10) * 5
fives = count_fives(mid)
if fives == n:
right = mid
left = right - 5
break
elif fives < n:
left = mid
else:
right = mid
return right
n = 2
print(solve(n)) Đầu vào
2
Đầu ra
10