Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我昨天读到了关于埃拉托什尼筛的报道,并想实施它_C++_Sieve Of Eratosthenes - Fatal编程技术网

C++ 我昨天读到了关于埃拉托什尼筛的报道,并想实施它

C++ 我昨天读到了关于埃拉托什尼筛的报道,并想实施它,c++,sieve-of-eratosthenes,C++,Sieve Of Eratosthenes,我正在寻找一些关于我的算法实现的反馈。我怎样才能改进它?由于整数溢出,我在计算大于46349的大素数时遇到了问题,但通过使用sqrt而不是pow解决了这个问题 #include<iostream> #include<math.h> using namespace std; int main(){ int number; cin >> number; const int CAP = number; bool * prime =

我正在寻找一些关于我的算法实现的反馈。我怎样才能改进它?由于整数溢出,我在计算大于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;
}
#包括
#包括
使用名称空间std;
int main(){
整数;
cin>>数量;
const int CAP=编号;
bool*prime=新bool[CAP];

对于(int i=0;i您访问的数组位于以下位置:

bool * prime = new bool[CAP];

for(int i = 0; i <= CAP; i++)
bool*prime=新bool[CAP];

对于(int i=0;i除了修复所有循环中的数组越界错误外,您还可以做一些提高效率的事情(使用isqrt
。您有:

if(i <= sqrt(number) && prime[i] == true) {
所以第一个就变得公正了

if (prime[i]) {

这个问题似乎离题了,因为它是关于复习(工作?)code.stackoverflow是针对有bug的代码的,但请务必解释您遇到的问题,因为人们不喜欢将代码转储并进行猜测。请访问codereview.SE,他们更倾向于回答此类问题。请注意,还有一个codereview.stackexchange.com是针对您希望获得的工作代码的我为您提供了意见和改进建议。我已经做了这些更改。谢谢!
if (prime[i]) {