gpt4 book ai didi

c++ - Eratosthenes 实现筛法

转载 作者:太空宇宙 更新时间:2023-11-04 15:46:27 25 4
gpt4 key购买 nike

我正在尝试为埃拉托色尼筛法实现算法,但我不知道为什么这个程序对于较大的程序会崩溃。最初我使用的是 vector,但现在我使用动态内存分配来实现它。

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

unsigned isqrt(unsigned value) {
return static_cast<unsigned>(sqrt(static_cast<float>(value)));
}

int main()
{
int t;
cin >> t;
long long * N;
long long * M;
long long n, m;
N = new long long[t];
M = new long long[t];
for(int i = 0; i < t ; i++){
cin >> M[i] >> N[i];
}

for(int i = 0; i < t ; i++){
n = N[i];
m = M[i];

bool * A;
A = new bool[n];
if(A == 0)
{
cout << "Memory cannot be allocated";
return 0;
}

for(int i=0;i < n;i++){
A[i]=true;
}
A[0] = false;
A[1] = false;

unsigned sqrt = isqrt(n);
for(int i = 2; i <= sqrt; i++)
{
if(A[i] == true){
for(int j = i*i; j <= n; j = j + i)
{
A[j] = false;
}
}
}

for(int i = m;i < n;i++)
{
if(A[i] == true )
cout << i << "\n";
}

delete[] A;
}

delete[] M;
delete[] N;
return 0;
}

nm (~10^16) 值较大时,程序会崩溃。请帮助我。

最佳答案

for(int j = i*i; j <= n; j = j + i)
^^

如果j == n然后A[j] = false将分配给数组末尾之后的元素。测试应该是j < n .

关于c++ - Eratosthenes 实现筛法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15980599/

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