找n!中p为因数次数
打质数表
对于每个质数p
代码:
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+6;
int prime[N],mi[N],cnt,tmp,n,p;
bool st[N];
void mTable(int n){
for(int i=2;i<=n;i++){
if(!st[i]) prime[cnt++]=i;
for(int j=0;prime[j]<=n/i;j++){
st[i*prime[j]]=true;
if(i%prime[j]==0) break;
}
}
}
int main(int argc, char** argv) {
cin>>n;
mTable(n);
for(int i=0;i<cnt;i++){
p=prime[i];
tmp=n;
while(tmp) mi[i]+=tmp/p, tmp/=p;
}
for(int i=0;i<cnt;i++){
printf("%d %d\n",prime[i], mi[i]);
}
return 0;
} 
京公网安备 11010502036488号