【数论】nefu118 n!后面有多少个0
就是求n!有多少个因子2和因子5,并在这两者中取较小者。因为必须要一个2和一个5才能拼出1个10。
显然2的数量多于5,因此只需要求n!有多少个因子5即可。
n!中素因子p的个数=
[n/p]+[n/p^2]+...
证明比较显然,因为n/p就是小于等于n的数中,有多少个能整除p的。
然后这个就是把含有p的个数,含有p^2的个数,...一加起来就行了。
#include<cstdio>
using namespace std;
typedef long long ll;
int T,n,ans;
int main(){
// freopen("a.in","r",stdin);
scanf("%d",&T);
for(;T;--T){
ans=0;
scanf("%d",&n);
ll t=5;
while(t<=(ll)n){
ans+=(n/(int)t);
t*=5ll;
}
printf("%d\n",ans);
}
return 0;
}
——The Solution By AutSky_JadeK From UESTC
转载请注明出处:http://www.cnblogs.com/autsky-jadek/

浙公网安备 33010602011771号
