172 求n!结尾有多少个0

本文深入探讨了计算阶乘n!时,结果末尾零的个数问题,涉及数学和计算机科学的结合,揭示了素数5和2在决定尾部零数量中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                                                                                                                             点击此处返回总目录

 

 

【题目】

 

【分析】

看起来挺简单的。有几个0,说明乘出来了几个10。

怎么才能有10呢?比如15!=1*2*3*4*5*6*7*8*9*10*11*12*13*14*15,可以看到2*5得到一个10,10本身有一个10。虽然4*5也得到10,但是5被2用了,就没有了。所以每10个数可以产生两个10,或者每5个数产生1个10。

 

代码:

结果:

 

不对哎。。。为啥呢?

因为25 = 5*5,25*4 = 100,可以得到两个0。

 

我们换一种思路。最后的结果后面有几个0,说明相乘得到了几个10。而前面的数可以分解为质数的乘积,10也能分解为质数的乘积。10只能分解为2*5。又因为前面的数分解的质数中2的数量远大于5的数量。所以:前面的数可以分出多少个5,说明就能产生多少个0。

现在的问题是怎么知道n!能分解出多少个5。

 

我们来分析一下,比如,n=125.能产生5的有:

5  10  15  20   25   30   35   40   45   50    55   60   65   70    75    80   85   90   95   100     105    110    115    120     125

我们先让每一个数拿出一个5。共得到100/5 = 25个。这时候就变成了:

1   2    3    4     5     6     7     8    9     10    11   12    13   14    15    16   17   18   19    20       21      22      23      24      25

 

这里面还能拿出5来的只有:

                         5                                10                                 15                                 20                                               25

让他们每一个拿出一个5来。再得到25/5 = 5个。这时候他们变成了:

                         1                                 2                                   3                                   4                                                 5

 

这里面还能拿出5的只有:

                                                                                                                                                                                         5

让它拿一个5出来。再得到5/5=1个。

最终共得到:25+5+1=31个5。对应31个0。

 

【代码】

 

【结果】

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值