统计n!里面有素数5的幂即可。
公式:[n/p] + [n/p^2] + [n/p^3] + ……
#include <iostream>
using namespace std;
typedef long long ll;
int main()
{
int Case;
cin>>Case;
while(Case--)
{
ll m,five=5;
cin>>m;
ll sum=0;
while(m>=five){
sum+=m/five;
five*=5;
}
cout<<sum<<endl;
}
return 0;
}
算出2n!中p的幂减去2倍的n!中p的幂即可
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n,p;
scanf("%d%d",&n,&p);
double s=log10(2*n)/log10(p);///算出小于2*n的最大p^s
int m=int(s),k=1,sum=0;
for(int i=1;i<=s;i++)
{
k=k*p;
sum+=(int)(2*n/k)-2*(int)(n/k);
}
printf("%d\n",sum);
}
return 0;
}