找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; }