【数论】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;
}
posted @ 2017-03-20 23:07  AutSky_JadeK  阅读(140)  评论(0编辑  收藏  举报
TVアニメ「Charlotte(シャーロット)」公式サイト TVアニメ「Charlotte(シャーロット)」公式サイト