You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求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:
    1. 把n分解为n = 2^a ×5^b ×m,其中m和10互质(不含2和5的因子)
    2. 更新剩余2的数量:r(n) = r(n-1) + a - b
    3. 计算f(n) = (f(n-1) × m × 2^(a-b)) mod 10(理论上结果不会为0,因为已去掉所有5的因子)

周期性规律

阶乘末尾非零数字具有周期性:

  • 对于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:08:31