目前,我正在一个项目中,我要在其中计算所有素数。
当我编译(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

10-08 13:30