计算n!末尾所包含0的个数

转自:http://blog.csdn.net/waitfor_/article/details/7213288

 

 

例如,5!=120,其末尾所含有的“0”的个数为1;10!= 3628800,其末尾所含有的“0”的个数为2;20!= 2432902008176640000,其末尾所含有的“0”的个数为4。

这里先给出其计算公式,后面给出推导过程。令f(x)表示正整数x末尾所含有的“0”的个数,则有: 


      当0 < n < 5时,f(n!) = 0; 


      当n >= 5时,f(n!) = k + f(k!), 其中 k = n / 5(取整)。

从而可以递归求解。

证明:

           先证明一个结论。

           结论1: 对于n的阶乘n!,其因式分解中,如果存在一个因子“5”,那么它必然对应着n!末尾的一个“0”。

                         证明:首先我们知道在一堆乘法中产生0的途径只有2*5得到10,所以有几对2,5就可以得到几个0.下面我们可以将n!分解,n!= [5k * 5(k-1) * ... * 10 * 5] * a,其中 n = 5k + r (0 <= r <= 4),a是一个不含因子“5”的整数。对于序列5,10,15,······,5(k-1),5k,中每一个数都含有因子5,并且在区间(5(k- 1),5k) 内总有一个2产生一个0,将上述序列提出一个5得到n!= 5^k * k! * a,其中k!可以递归的得到其满足结论1.

           有了上面的结论,我们知道f(n!) 只与5因子个数有关。f(n!) =  f(5^k * k! * a) = k + f(k!) = k + f(k!),其中k = n / 5(取整)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值