http://acm.nyist.net/JudgeOnline/problem.php?pid=56也使用于求阶乘中0的个数等
如果不知道这个真的不会几行代码解决掉,搜了一下发现了下面的东西(http://www.cnblogs.com/dolphin0520/archive/2011/04/11/2012891.html)。无论如何,开始了。这一次不再彷徨、勇往直前!
求n的阶乘某个因子a的个数,如果n比较小,可以直接算出来,但是如果n很大,此时n!超出了数据的表示范围,这种直接求的方法肯定行不通。其实n!可以表示成统一的方式。
n!=(k^m)*(m!)*a 其中k是该因子,m=n/k,a是不含因子k的数的乘积
下面推导这个公式
n!=n*(n-1)*(n-2)*......3*2*1
=(k*2k*3k.....*mk)*a a是不含因子k的数的乘积,显然m=n/k;
=(k^m)*(1*2*3...*m)*a
=k^m*m!*a
接下来按照相同的方法可以求出m!中含有因子k的个数。
因此就可以求除n!中因子k的个数
int count(int n,int k)
{int num=0;
while(n)
{num+=n/k;
n/=k;}
return num;
}