题目:
见https://www.acwing.com/problem/content/199/
思路:
见书P138或者看y总视频
代码:
#include<iostream>
#include<cmath>
using namespace std;
const int N=1e6;
int m,n,visit[N];
typedef pair<int,int> PII;
PII prime[N];
void is_prime(int n)
{
for(int i=2;i<=n;i++)
{
if(visit[i]==0) prime[++m].first=i;
for(int j=1;j<=m;j++)
{
int t=prime[j].first;
if(t>i||i*t>n)
break;
visit[i*t]=1;
}
}
}
int main()
{
cin>>n;
is_prime(n);
for(int i=1;i<=m;i++)
{
int sum=0;
int p=prime[i].first;
for(int j=1;n/pow(p,j);j++)
sum+=n/pow(p,j);
prime[i].second=sum;
}
for(int j=1;j<=m;j++)
cout<<prime[j].first<<" "<<prime[j].second<<endl;
return 0;
}