gpt4 book ai didi

c++ - 埃拉托色尼筛法 C++

转载 作者:行者123 更新时间:2023-11-28 03:08:10 24 4
gpt4 key购买 nike

目前我正在做一个项目,我想计算所有素数。当我编译 (MINGW Windows Comp.) 时,程序崩溃并返回一个随机错误号。这是我写的代码:

http://pastebin.com/4vVnAM2v

/*
Sieb des Eratosthenes
*/

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

main()
{
//variablendeklaration
unsigned int nmax=100;
unsigned int i,j,erg;
bool prim[nmax];

//Initialisieren
prim[0]=false;
prim[1]=false;

//array prim[i] erstellen
for(i=2;i<nmax;i++)
{
prim[i]=true;
}




for(i=2;i<nmax;i++) //alle Primzahlen durchlaufen
{
if(prim[i] == true) //auf Prim prüfen
{
for(j=2;j<nmax;j++) //multiplizieren und wegstreichen
{
erg = j * i;
prim[erg] = false;
}
}
}

for(i=2;i<nmax;i++)
{
cout << prim[i] << endl;
}


}

最佳答案

此时:

            erg = j * i;
prim[erg] = false;

您最终将访问 prim 的范围之外,因为 ij 的值最多为 nmax - 1,因此 erg 的最大值为 (nmax - 1) * (nmax - 1)。您需要检查此条件并在 erg >= nmax 时中断,例如

            erg = j * i;
if (erg < nmax) // if i * j still within bounds
prim[erg] = false; // set prim[i * j] to false
else // else i * j now >= nmax
break; // break out of loop and try next i value

关于c++ - 埃拉托色尼筛法 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19166524/

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