就是求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 ",ans); } return 0; }