gpt4 book ai didi

c++ - 素数生成器中的 sigabrt 和 sigsegv 错误

转载 作者:行者123 更新时间:2023-11-28 03:21:06 27 4
gpt4 key购买 nike

#include<iostream>
#include<cmath>
#include<vector>
using namespace std;


int main()
{
int n1;
cin>>n1;
long long int MAX,n;
while(n1--)
{
int* primes = new int[1000000000];
//vector<int> v[10000000];
//int primes[100000]={1};
cin>>n;
cin>>MAX;
int i,j;
for(i=2;i<=MAX;i++) primes[i] = 1;
for(i=2;i<=(int)sqrt(MAX);i++)
{
// cout<<"primes[i]\t"<<i<<" "<<primes[i]<<endl;
if (primes[i])
{
for(j=i;j*i<=MAX;j++)
{
primes[i*j] = 0;
// cout<<"primes[i*j]\t"<<i*j<<" "<<primes[i*j]<<endl;;
}
}
}
primes[0]=0;
primes[1]=0;
for(int i=n;i<=MAX;i++)
{
if(primes[i])
cout<<i<<" "<<endl;
}
delete[] primes;
}
cout<<endl;

}

这是素数范围的程序,即在两个数字之间找到素数我正在使用 erthenses 算法我的问题是大输入和更多测试用例它在在线判断中显示 SIGABRT 有时显示 SIGSEGV 我不是能够弄清楚如何做到这一点任何帮助表示感谢谢谢

最佳答案

以下内容:

int* primes = new int[1000000000];

将尝试分配 4GB 的 RAM(假设 int 是 32 位)。

在线判断会允许你的进程分配那么多RAM吗?我对此表示怀疑。

严格来说,每个元素只需要一位(因为它不是零就是一),因此剩余的 31 位(或您分配的内存的 97%)被浪费了。

关于c++ - 素数生成器中的 sigabrt 和 sigsegv 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15406848/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com