目前,我正在一个项目中,我要在其中计算所有素数。
当我编译(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
的范围,因为i
和j
的值都最多为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