我最近学习了筛分算法,并开始使用它来学习如何在问题中使用该算法。我已经正确地编写了代码,因为我在代码中找不到任何错误,但是它关闭时没有显示任何输出。找不到出什么问题了。我会感谢你的帮助。
#include <iostream>
#include <vector>
//#define MAX 10000
typedef long long int ll;
using namespace std;
vector <ll> primes;
void sieve(){
ll MAX = 100000000;
bool isPrime [MAX];
for(ll i = 0;i < MAX; ++i)isPrime[i] = true;
//isPrime[0] = isPrime[1] = false;
for(ll i=3; i*i <= MAX; i += 2){
if(isPrime[i]){
for(ll j = i*i; j <= MAX; j += i){
isPrime[j] = false;
}
}
}
primes.push_back(2);
for(ll i = 3; i <= MAX; i += 2){
if(isPrime[i]){
primes.push_back(i);
}
}
for(ll i = 0; i <= 10; ++i){
cout<<primes[i]<<endl;
}
}
int main(){
sieve();
return 0;
}发布于 2020-08-04 14:34:25
您正在创建一个大小为10^8的静态数组,该数组存储在堆栈中。这对于堆栈来说太大了,可能会导致堆栈溢出。
相反,使用vector将数据存储在堆中,如下所示:
vector<bool> isPrime(MAX+1);这是一个演示。
另外,请注意,您有一个off错误,因为您正在索引MAX,因此向量应该是MAX+1大小。
此外,您应该避免使用using namespace std;,以及像ll这样的类型设置,它们会使代码更难阅读。
https://stackoverflow.com/questions/63249054
复制相似问题