📅  最后修改于: 2023-12-03 15:25:50.641000             🧑  作者: Mango
这是一个经典的计算阶乘末尾零的问题,我们知道一个数阶乘末尾零的个数,就是该数因子中5的个数。
因此,我们可以通过迭代计算5的次数来逼近最小的X。
下面是一个实现此问题的 Python 代码片段:
def find_X(Y: int) -> int:
"""
找到最小的 X,使 X! 至少包含 Y 个尾随零
"""
def count(n: int) -> int:
"""
计算n!中因子5的个数
"""
res = 0
while n >= 5:
res += n // 5
n //= 5
return res
low, high = 0, Y * 5
while low <= high:
mid = (low + high) // 2
if count(mid) >= Y:
high = mid - 1
else:
low = mid + 1
return low
print(find_X(6)) # 25
代码中使用二分法对 X 进行逼近,注意到 Y 的范围很大,因此 X 的范围也比较大,需要乘以一个常数,这里使用 5。
返回结果为最小的 X 值,使得 X! 至少包含 Y 个尾随零。本例中 Y 为 6,最小的 X 为 25,即 25! 中包含至少 6 个尾随零。