0
点赞
收藏
分享

微信扫一扫

P5723 质数口袋

Gascognya 2022-02-11 阅读 45
算法

题目描述
小 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;
} 

总结:只过了给的测试用例,逻辑没有问题,就因为注释的那个小细节没注意。大意了大意了,记录一下!

举报

相关推荐

0 条评论