码迷,mamicode.com
首页 > 其他好文 > 详细

不要被阶乘吓到

时间:2015-11-03 17:38:49      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

Q:给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N = 10,N! = 3628800, N!的末尾有两个0

分析与解法:

  有些人碰到这样的问题,是不是要完整的计算出N!的值?如果溢出怎么办?事实上,如果我们从“哪些数相乘能得到10”这个角度考虑,问题就变得简单了。

  首先考虑,如果N! = K * 10M,且K不能被10整除,那么N!末尾有M个0。再考虑对N!进行质因数分解,N! = (2X)*(3Y)*(5Z).....,由于10=2*5,所以M只跟X和Z相关,每一对2和5相乘可以得到一个10,于是M=min(X,Z)。不难看出X大于等于Z,因为能被2整除的数出现的频率比能被5整除的数高得多,所以把公式化简为M=Z.


 

不要被阶乘吓到

标签:

原文地址:http://www.cnblogs.com/QoQian/p/4933644.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!