首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用筛子打印到10^8的素数?

如何使用筛子打印到10^8的素数?
EN

Stack Overflow用户
提问于 2020-08-04 14:28:23
回答 1查看 91关注 0票数 0

我最近学习了筛分算法,并开始使用它来学习如何在问题中使用该算法。我已经正确地编写了代码,因为我在代码中找不到任何错误,但是它关闭时没有显示任何输出。找不到出什么问题了。我会感谢你的帮助。

代码语言:javascript
运行
复制
#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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-04 14:34:25

您正在创建一个大小为10^8的静态数组,该数组存储在堆栈中。这对于堆栈来说太大了,可能会导致堆栈溢出。

相反,使用vector将数据存储在堆中,如下所示:

代码语言:javascript
运行
复制
vector<bool> isPrime(MAX+1);

这是一个演示

另外,请注意,您有一个off错误,因为您正在索引MAX,因此向量应该是MAX+1大小。

此外,您应该避免使用using namespace std;,以及像ll这样的类型设置,它们会使代码更难阅读。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63249054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档