算法原理:
- (文章链接)
#include<cstdio>
#include<iostream>
using namespace std;
const int MAXN=1e6;
int primes[MAXN],primeCnt=0;
bool notPrime[2*MAXN];
void initPrime(int x){
for(int i=2;i<=x;i++){
if(notPrime[i])continue;
for(int j=2;j<=x/i;j++){
notPrime[i*j]=1;
}
}
for(int i=2;i<=x;i++)
if(!notPrime[i])primes[++primeCnt]=i;
}
int ans[MAXN],ansValue[MAXN];
int main(){
int n;
scanf("%d",&n);
initPrime(n);
for(int i=1;i<=primeCnt;i++){
int tmpN=n,nowPrime=primes[i],nowAns=0;
while(tmpN){
nowAns+=(tmpN/nowPrime);
tmpN/=nowPrime;
}
printf("%d %d
",nowPrime,nowAns);
}
return 0;
}