不要被阶乘吓到

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.


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