Bug dans programme de génération de nombre premier sous Windows
Mon programme compilé sous Dev C++ fonctionne jusqu'à 40, à 41, un message apparait comme quoi "Nbpremier.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru."
Voici le programme :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| #include <stdio.h>
#include <math.h>
#include <conio.h>
int main()
{
int GrandeBoucle; /* Nombre étudié*/
int IndiceNombrePremier; /* Indice du nombre premier */
int IndiceDernierNbPremierTrouve; /* Indice du dernier nombre premier trouvé */
int NOMBREMAX; /* Nombre étudié */
int TABLEAU[IndiceNombrePremier]; /* Liste des J-1 nombres premiers */
double NbEuclide; /* Nombre du crible d'Euclide */
printf(" ******************************************************************************\n");
printf(" * *\n");
printf(" * PROGRAMME DE DETERMINATION DE TOUS LES NOMBRES PREMIERS DE 2 A N *\n");
printf(" * *\n");
printf(" ******************************************************************************\n");
printf("\n\n\n\n\nEntrez une valeur N positive et superieure a 5 : ");
scanf("%d",&NOMBREMAX);
TABLEAU[0]=2;
TABLEAU[1]=3;
printf("\n\nListe des nombres premiers jusqu'a %d : %4d%4d",NOMBREMAX,TABLEAU[0],TABLEAU[1]);
IndiceDernierNbPremierTrouve=1;
for (GrandeBoucle=5;GrandeBoucle<=NOMBREMAX;GrandeBoucle+=2)
{
NbEuclide=floor(sqrt(GrandeBoucle));
IndiceNombrePremier=0;
while(GrandeBoucle%TABLEAU[IndiceNombrePremier]!=0 && TABLEAU[IndiceNombrePremier]<=NbEuclide)
{
IndiceNombrePremier++;
if (TABLEAU[IndiceNombrePremier]>NbEuclide)
{
IndiceDernierNbPremierTrouve=IndiceDernierNbPremierTrouve+1;
TABLEAU[IndiceDernierNbPremierTrouve]=GrandeBoucle;
printf("%4d",TABLEAU[IndiceDernierNbPremierTrouve]);
}
}
}
getch();
return 0;
} |