在我的Eratosthenes算法的Sieve的C++实现中,什么可能导致运行时错误?[关闭]

bzzcjhmw  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(115)

**已关闭。**此问题不符合Stack Overflow guidelines。目前不接受答复。

这个问题似乎不是关于在help center定义的范围内编程。
6天前关闭
这篇文章是编辑并提交审查6天前.
Improve this question
为什么会出现运行时间错误?..请帮助我试图输出第i个素数,但我一直gettng运行时错误。我可以运行代码在离线编译器,但不能在在线编译器

#include<bits/stdc++.h>
using namespace std;

vector<long long>prima;
long long int SieveOfEratosthenes(){
    bool prime[1000006];
    for (long long int p = 2; p <= 1000000; p++) {
        if (prime[p]==false){
        prima.push_back(p);
            for (long long int i = p * p; i <= 1000000; i += p){
                prime[i] = true;
            }                
        }   
    }
}     

int main(){ 
    long t;
    cin>>t;
    SieveOfEratosthenes();
    while(t--){
        long long int k;
        cin>>k;
        cout<<prima[k-1];
    }
    return 0;
}
mbskvtky

mbskvtky1#

本宣言

bool prime[1000006];

使prime中的值未定义,包括将导致未定义行为的陷阱值。即使您修复了这个问题,它也会因为太大而面临堆栈溢出的风险。
因此,只需将上面的行替换为:

std::vector<bool> prime(1000006);

除了文件顶部的#include <vector>之外,其他所有内容都保持不变。

相关问题