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