题目描述
小 A 有一个质数口袋,里面可以装各个质数。他从 2 开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋。口袋的负载量就是口袋里的所有数字之和。但是口袋的承重量有限,不能装得下总和超过100000的质数。给出 LL,请问口袋里能装下几个质数?将这些质数从小往大输出,然后输出最多能装下的质数个数,所有数字之间有一空行。
输入格式
一行一个正整数 L。
输出格式
将这些质数从小往大输出,然后输出最多能装下的质数个数,所有数字之间有一空行。
#include <stdio.h>
#include <algorithm>
using namespace std;
int prime[1000001],num=0,sum=0;
bool p[1000001]={0};
void isPrime(int n){
for(int i=2;i<1000001;i++){
if(p[i]==false){
prime[num++]=i;
sum+=i;
if(sum==n)
break;
//这里是最容易出错的地方。现在不小于n,但加下一个就错了,要减去
else if(sum>n){
sum-=i;
num--;
break;
}
for(int j=i;j<1000001;j+=i)
p[j]=true;
}
}
}
int main(){
int k;
scanf("%d",&k);
isPrime(k);
for(int i=0;i<num;i++){
printf("%d\n",prime[i]);
}
printf("%d",num);
return 0;
}
总结:只过了给的测试用例,逻辑没有问题,就因为注释的那个小细节没注意。大意了大意了,记录一下!