80分求改,第二个点WA,有注释
查看原帖
80分求改,第二个点WA,有注释
1401422
Steekee_012楼主2024/8/7 09:54

我觉得这个题思路其实挺清楚的,但是不知道为什么第二个点会爆,我没有把筛选范围限制到根号n,但是这个最多影响一点时间,不至于WA吧

#include<bits/stdc++.h>
using namespace std;
int m=10000;
int L;
int n=2, s=0, j=1;//初始化,判断的主体数字是n 
bool t=0;
int main(){
	int p[m];
	p[1]=2;//维护一个质数数组(按照输入数据范围开到10000),第一项为2 
	cin >> L;
	if(L==1){
		cout << 0;
	}//L为1的时候装不下 
	while(s<=L){
	    for(int i=1; i<=j; i++){//这是用质数数组进行判断,p[j]是已知最大的质数 
			if(n%p[i]==0){//是合数就改变t 
				t=1;}
		} 
		if(t==0){//检查t的布尔值,还是0说明这个n是质数 
			s+=n;
			j++;
			p[j]=n;//更新数组的状态 
		}
		else{t=0;}
		n++;
	}//跳出循环时是第一个s>L的状态,下面输出时回退一个 
    for(int i=1; i<=j-1; i++){
    	cout << p[i] << endl;
	}
	cout << j-1;
	return 0;
}
2024/8/7 09:54
加载中...