Partage
  • Partager sur Facebook
  • Partager sur Twitter

Nombres premiers

Sujet résolu
    4 avril 2008 à 22:50:35

    Bonjour,

    Je voudrais trouver les nombres premiers de façon barbare avec mon ordinateur :p : je prends un nombre, je regarde s'il est multiple de quelque chose, puis je continue. Ainsi j'ai obtenu ce code en c++ :

    1. #include <iostream>
    2. using namespace std;
    3. int main()
    4. {
    5.     int quantite_avant_arret = 1;
    6.     int quantite_actuelle = 0;
    7.     int nombre_testeur = 2;
    8.     int nombre_a_tester = 2;
    9.     bool continuer = true;
    10.         cout <<"-------------------------------" << endl
    11.          <<"Calculateur de nombres premiers" << endl
    12.          <<"-------------------------------" << endl
    13.          << endl
    14.          <<"Entrez le nombre de nombres premiers a calculer avant arret:" << endl;
    15.     cin >> quantite_avant_arret;
    16.     cout << endl
    17.          <<"L'application s'arretera tous les " << quantite_avant_arret << " nombres premiers calcules" << endl
    18.          ;
    19.     cout << "Debut du calcul..." << endl << "Nombres premiers : " << endl << endl;
    20.     while (continuer)
    21.     {
    22.         if (nombre_a_tester == nombre_testeur)
    23.         {
    24.             //Alors le nombre est premier
    25.             cout << nombre_a_tester;
    26.             quantite_actuelle++;
    27.             nombre_a_tester++;
    28.             nombre_testeur = 2;
    29.         }
    30.         else
    31.         {
    32.             if (nombre_a_tester%nombre_testeur==0)
    33.             {
    34.                 nombre_testeur++;
    35.             }
    36.             else
    37.             {
    38.                 nombre_a_tester++;
    39.                 nombre_testeur = 2;
    40.             }
    41.         }
    42.     }
    43.         return 0;
    44. }


    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.
    • Partager sur Facebook
    • Partager sur Twitter
      4 avril 2008 à 23:00:32

      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.
      • Partager sur Facebook
      • Partager sur Twitter
        4 avril 2008 à 23:11:14

        Mon algorithme marchait très bien, au contraire ;)

        J'ai trouvé la solution, j'ai tapé "==" au lieu de "!=" dans la seconde condition.

        Ce qui donne :

        1. #include <iostream>
        2. using namespace std;
        3. int main()
        4. {
        5.     int quantite_avant_arret = 1;
        6.     int quantite_actuelle = 0;
        7.     int nombre_testeur = 2;
        8.     int nombre_a_tester = 2;
        9.     bool continuer = true;
        10.         cout <<"-------------------------------" << endl
        11.          <<"Calculateur de nombres premiers" << endl
        12.          <<"-------------------------------" << endl
        13.          << endl
        14.          <<"Entrez le nombre de nombres premiers a calculer avant arret:" << endl;
        15.     cin >> quantite_avant_arret;
        16.     cout << endl
        17.          <<"L'application s'arretera tous les " << quantite_avant_arret << " nombres premiers calcules" << endl
        18.          ;
        19.     cout << "Debut du calcul..." << endl << "Nombres premiers : " << endl << endl;
        20.     while (continuer)
        21.     {
        22.         if (nombre_a_tester == nombre_testeur)
        23.         {
        24.             //Alors le nombre est premier
        25.             cout << nombre_a_tester;
        26.             quantite_actuelle++;
        27.             nombre_a_tester++;
        28.             nombre_testeur = 2;
        29.         }
        30.         else
        31.         {
        32.             if (nombre_a_tester%nombre_testeur!=0)
        33.             {
        34.                 nombre_testeur++;
        35.             }
        36.             else
        37.             {
        38.                 nombre_a_tester++;
        39.                 nombre_testeur = 2;
        40.             }
        41.         }
        42.     }
        43.         return 0;
        44. }


        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 !
        • Partager sur Facebook
        • Partager sur Twitter

        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.
        • Editeur
        • Markdown