Je voudrais trouver les nombres premiers de façon barbare avec mon ordinateur : je prends un nombre, je regarde s'il est multiple de quelque chose, puis je continue. Ainsi j'ai obtenu ce code en c++ :
#include <iostream>
usingnamespace std;
int main()
{
int quantite_avant_arret = 1;
int quantite_actuelle = 0;
int nombre_testeur = 2;
int nombre_a_tester = 2;
bool continuer = true;
cout <<"-------------------------------" << endl
<<"Calculateur de nombres premiers" << endl
<<"-------------------------------" << endl
<< endl
<<"Entrez le nombre de nombres premiers a calculer avant arret:" << endl;
cin >> quantite_avant_arret;
cout << endl
<<"L'application s'arretera tous les " << quantite_avant_arret << " nombres premiers calcules" << endl
;
cout << "Debut du calcul..." << endl << "Nombres premiers : " << endl << endl;
while(continuer)
{
if(nombre_a_tester == nombre_testeur)
{
//Alors le nombre est premier
cout << nombre_a_tester;
quantite_actuelle++;
nombre_a_tester++;
nombre_testeur = 2;
}
else
{
if(nombre_a_tester%nombre_testeur==0)
{
nombre_testeur++;
}
else
{
nombre_a_tester++;
nombre_testeur = 2;
}
}
}
return0;
}
Or le compilateur n'affiche pas d'erreur, mais la console s'arrête au nombre 2. J'ai regardé le gestionnaire des tâches il semble que le programme soit lancé dans une boucle infinie car l'UC est à 100% utilisée.
Qu'est-ce qui ne va pas dans mon code ?
NB: le "cin" au début ne sert absolument à rien pour l'instant. Il est juste là le temps que le problème soit résolu et que je mette une limite de nombres premiers à calculer.
Euh ... C'est normal, tu ne fais que tester si le nombre est égal à deux. S'il ne l'est pas, tu te contente de l'incrémenter ... Et comme tu n'as pas de condition qui rend faux ta variable "continuer", ta boucle ne s'arrête jamais ...
Je te conseille de revoir ton algo qui est complètement mauvais là ; à savoir qu'on ne détermine pas un nombre premier par sa divisibilité par 2 hein. Par exemple, 9 n'est pas divisible par 2 et pourtant il n'est pas premier.
J'ai trouvé la solution, j'ai tapé "==" au lieu de "!=" dans la seconde condition.
Ce qui donne :
#include <iostream>
usingnamespace std;
int main()
{
int quantite_avant_arret = 1;
int quantite_actuelle = 0;
int nombre_testeur = 2;
int nombre_a_tester = 2;
bool continuer = true;
cout <<"-------------------------------" << endl
<<"Calculateur de nombres premiers" << endl
<<"-------------------------------" << endl
<< endl
<<"Entrez le nombre de nombres premiers a calculer avant arret:" << endl;
cin >> quantite_avant_arret;
cout << endl
<<"L'application s'arretera tous les " << quantite_avant_arret << " nombres premiers calcules" << endl
;
cout << "Debut du calcul..." << endl << "Nombres premiers : " << endl << endl;
while(continuer)
{
if(nombre_a_tester == nombre_testeur)
{
//Alors le nombre est premier
cout << nombre_a_tester;
quantite_actuelle++;
nombre_a_tester++;
nombre_testeur = 2;
}
else
{
if(nombre_a_tester%nombre_testeur!=0)
{
nombre_testeur++;
}
else
{
nombre_a_tester++;
nombre_testeur = 2;
}
}
}
return0;
}
PS: merci de m'apprendre ce qu'est un nombre premier c'est pour ça que je m'embête à trouver tous les diviseurs en incrémentant "nombre_testeur" à chaque fois !
Nombres premiers
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.