📌  相关文章
📜  找到最小的X,使X!至少包含Y个尾随零。(1)

📅  最后修改于: 2023-12-03 15:25:50.641000             🧑  作者: Mango

找到最小的X,使X!至少包含Y个尾随零

这是一个经典的计算阶乘末尾零的问题,我们知道一个数阶乘末尾零的个数,就是该数因子中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 个尾随零。