满足n!的末尾恰好有k个0的最小的n是多少
时间: 2023-04-26 20:02:09 浏览: 89
n的阶乘(n!)末尾有多少个0
要满足n!的末尾恰好有k个0,就需要n!中包含k个因子5。因为每个因子5都可以和一个因子2相乘得到一个10,而2的因子数量一定比5多,所以只需要考虑因子5的数量。
首先,我们可以发现,当n越大,n!中包含的因子5的数量也会越多。因此,我们可以使用二分查找的方法来找到最小的n,使得n!中包含k个因子5。
具体来说,我们可以先设定一个左边界l和一个右边界r,分别为1和k。然后,每次取中间值mid=(l+r)//2,计算mid!中包含的因子5的数量count,如果count<k,则说明mid太小,应该将左边界l更新为mid+1;如果count>=k,则说明mid可能是一个合法的解,应该将右边界r更新为mid。最终,当l=r时,就找到了最小的n。
下面是具体的代码实现:
def count_factors(n, factor):
count = 0
while n % factor == 0:
count += 1
n //= factor
return count
def count_trailing_zeros(n):
count = 0
while n > 0:
count += n // 5
n //= 5
return count
def find_min_n(k):
l, r = 1, k
while l < r:
mid = (l + r) // 2
count = count_trailing_zeros(mid)
if count < k:
l = mid + 1
else:
r = mid
return l if count_trailing_zeros(l) == k else -1
其中,count_factors(n, factor)函数用于计算n中包含的因子factor的数量,count_trailing_zeros(n)函数用于计算n!末尾的0的数量,find_min_n(k)函数用于找到最小的n,使得n!末尾恰好有k个0。如果找不到这样的n,则返回-1。
阅读全文