[Golang 修仙之路] 智力题:100!中有几个末尾0

25 阅读2分钟

这是一道经典的数学题,考察的是对阶乘中“末尾零”来源的理解。这道题的思考方式可以分为三步:找到末尾零的来源分解质因数,以及计算因子的数量

1. 找到末尾零的来源

一个数的末尾是零,意味着这个数是10的倍数。而10可以分解为2×5。因此,任何一个末尾零,都必然是由一个质因数2和一个质因数5相乘得到的。

所以,问题“123*4...100 总共有多少个连续的末尾0”就等价于**“在1到100的所有整数相乘的积中,有多少对 2×5”**。

2. 分解质因数与简化问题

在1到100的所有整数中,质因数2的数量显然比质因数5多得多。例如,2、4、6、8...这些偶数都含有质因数2。而5、10、15...这些数才含有质因数5。

既然每一对2×5才能产生一个末尾零,那么末尾零的数量就完全取决于质因数5的数量。因为质因数2的数量总是充足的,所以我们只需要计算乘积中总共有多少个质因数5即可。

3. 计算质因数5的数量

我们只需要找出1到100中所有能被5整除的数,并计算它们所含有的质因数5的总数。

  • 能被5整除的数:5, 10, 15, 20, ..., 100。

    这些数总共有 100÷5=20 个。

    每个数都至少含有一个质因数5,所以我们先得到20个5。

  • 能被25整除的数:25, 50, 75, 100。

    这些数除了能被5整除外,还额外多包含了一个质因数5(因为 25=5×5)。

    这些数总共有 100÷25=4 个。

    每个这样的数都为总数额外贡献一个5,所以我们再得到4个5。

  • 能被125整除的数:在1到100中没有能被125整除的数,所以这里没有额外的5。

将所有找到的质因数5的数量相加:

20(来自能被5整除的数)+4(来自能被25整除的数)=24

所以,123*4...100 的乘积中总共有24个质因数5。因此,总共有 24 个连续的末尾0。