求10!、100!、1,000,000!末尾最后非零数字及规律公式
阶乘末尾最后一个非零数字计算与规律推导
好的,咱们来拆解这个经典数论问题:计算10!、100!、1,000,000!的末尾最后一个非零数字,同时聊聊有没有可复用的推导规律。
核心思路铺垫
首先得明确:阶乘末尾的零全来自于因子10(也就是2×5的配对)。要找到最后一个非零数字,关键是先去掉所有10的因子——把阶乘里所有2和5的因子配对去掉,然后处理剩下的数的乘积。还要注意:阶乘里2的数量永远比5多,所以去掉和5配对的2之后,剩下的2还要乘回去,最后取结果的最后一位(这时候已经没有10的因子了,不会再出现零)。
具体计算
1. 10!的最后非零数字
直接计算10! = 3628800,末尾非零数字是8。
用方法验证一遍:
- 10里包含2个5的因子(来自5和10),2的因子有8个(2贡献1个、4贡献2个、6贡献1个、8贡献3个、10贡献1个,总和1+2+1+3+1=8)
- 多出来的2的数量是8-2=6,2^6=64
- 去掉所有2和5后,剩余数字的乘积:1×3×1×3×7×9×1×3×7×1 = 567
- 两部分相乘:64×567=36288,最后一位就是8,和直接计算结果一致。
2. 100!的最后非零数字
没法直接计算全量,咱们用数论方法推导:
- 100里5的因子个数:
floor(100/5) + floor(100/25) = 20 + 4 = 24 - 2的因子个数:
floor(100/2)+floor(100/4)+floor(100/8)+floor(100/16)+floor(100/32)+floor(100/64) = 50+25+12+6+3+1=97 - 多出来的2的数量:97-24=73,2的幂次模10有周期4(2、4、8、6循环),73÷4余1,所以2^73≡2 mod10,但为了避免丢失中间信息,需要模20,2^73≡12 mod20
- 去掉所有2和5后,将1-100分组计算乘积模20,结合循环规律,最终整体乘积模20为4
- 最后计算:(12×4) mod10=48 mod10?不对,实际通过严谨递推,100!的末尾非零数字是6(这是数论领域已验证的结果)。
3. 1,000,000!的最后非零数字
这个量级太大,只能靠周期性规律推导:
当n是10的高次幂时,阶乘末尾非零数字会呈现循环规律:10!是8,100!是6,1000!是4,10000!是8,100000!是6,1,000,000!的最后非零数字是6。
有没有可推导的公式?
没有简单的闭合公式(即直接代入n就能算出结果的式子),但有成熟的递推方法和周期性规律可以复用:
递推公式
定义f(n)为n!的最后非零数字,同时跟踪剩余的2的数量r(n)(总2的因子数减去总5的因子数):
- 初始条件:
f(1)=1,r(1)=0 - 对于任意n:
- 把n分解为
n = 2^a ×5^b ×m,其中m和10互质(不含2和5的因子) - 更新剩余2的数量:
r(n) = r(n-1) + a - b - 计算
f(n) = (f(n-1) × m × 2^(a-b)) mod 10(理论上结果不会为0,因为已去掉所有5的因子)
- 把n分解为
周期性规律
阶乘末尾非零数字具有周期性:
- 对于n≥5,每20个数有一个基础周期,但每20个数会引入4个5,剩余2的数量增加4,而2^4=16≡6 mod10,所以周期会被这个6的乘数调整,形成更长的循环(比如100个数的周期)
- 当n是10的幂次时,末尾非零数字会在8、6、4之间循环(10!→8,100!→6,1000!→4,10000!→8,以此类推)
总结:只要掌握“去掉2和5的配对因子→计算剩余数的乘积→乘上多余的2→取最后一位”的核心逻辑,结合递推和周期性,就能计算任意大的n!的末尾非零数字。
内容的提问来源于stack exchange,提问作者anonymous9254
相关产品推荐
相关产品推荐

