​题目传送门​

主要运用了线性的质数筛,在质数筛中加入了输出数据的功能

#include<iostream>
using namespace std;
int main()
{
int sum = 0,n;
cin >> n;
int zhi[1000] ={0},length1 = 0,num[2001]={0};
for(int i=0;i<2001;i++)
num[i] = i;
for(int i=2;i<2001;i++){
if(num[i]==i){
zhi[length1] = i,length1++;
sum += i;
if(sum <= n)
printf("%d\n",zhi[length1-1]);
}
if(sum > n){
cout<<length1-1<<endl;
break;
}
for(int j=0;zhi[j]<=num[i]&&zhi[j]*i<=2001;j++)
num[i*zhi[j]] = zhi[j];
}
return 0;
}