阶乘问题分为几类:
1.求阶乘末尾0的个数,,直接除以5,累加即可。
2.求阶乘的结果一共有多少位,stirling公式:n!≈sqrt(2*PI*n) * (n/e)^n,直接取以10为底的对数,整数部分即为位数。http://poj.org 第1423题
3.求阶乘的最后非零位,这类问题比较复杂,专题中我们着重讨论这个问题
首先看POJ1150
题目大意:求n的m排列的最后非零位。
题目分析:n的m排列即P(n,m)=n!/(n-m)!,所以这题是求两个阶乘商的最后非零位。我们处理阶乘时一般是逐个处理。首先看普遍性的对于一个数n的阶乘,我们如何处理它的末尾非零位。
10的因子是2和5,这两个数不属于模10的缩系,所以我们在处理数时要剔除掉这两个因子,剔除所有数中含5和2这两个因子。
首先我们用f(n,x)表示小于等于n的数中,末尾位x的数的个数。n我们可以分解为1,3,5,7,9... 2,4,6,8,10...
因为我们将偶数中的2因子剔除了,所以2,4,6,8,10...实际上又变成了1,3,5,7,9...
所以我们可以得到递推式f(n,x)=f(n/2,x)+g(n,x),g(n,x)表示的是小于等于n的奇数中尾数为x的数的个数。<