gpt4 book ai didi

c++ - 我昨天读到了埃拉托色尼筛法,想实现它

转载 作者:太空宇宙 更新时间:2023-11-04 11:36:48 24 4
gpt4 key购买 nike

我正在寻找有关算法实现的一些反馈。我该如何改进它?由于整数溢出,我在计算大于 46349 的较大素数时遇到了问题,但通过使用 sqrt 而不是 pow 解决了这个问题。

#include<iostream>
#include<math.h>
using namespace std;

int main(){
int number;
cin >> number;
const int CAP = number;
bool * prime = new bool[CAP];

for(int i = 0; i <= CAP; i++){ //sets all to true for the marking
prime[i] = true;
}

for(int i = 2; i <= number; i++){
if(i <= sqrt(number) && prime[i] == true){
for(int j = i*i; j <=number; j++){ //if %i == 0 mark false
if(j % i == 0){ //haven't tried another way
prime[j] = false;
}
}
}
}

for(int i = 2; i <= number; i++){
if(prime[i] == true){
cout << i << endl;
}
}

return 0;
}

最佳答案

您正在越界访问数组:

bool * prime = new bool[CAP];

for(int i = 0; i <= CAP; i++)

您应该将其更改为使用 <而不是 <=

请注意,这同样适用于 <=在你的其他循环中也是如此。

关于c++ - 我昨天读到了埃拉托色尼筛法,想实现它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22772860/

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