Partage
  • Partager sur Facebook
  • Partager sur Twitter

nombre premier

Sujet résolu
    29 septembre 2008 à 2:14:28

    salut tout le monde
    j'ai essayé de fair un programme qui consiste a afficher les nombres premiers de 1 a 100 mais il parait que j'ai un probleme dans mon code puisqu'il m'affiche des nombres qui sont devisable je souhaite que vous jetez un coup d'oeil sur mon programme afin de trouver la solution merci infiniment
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int r = 0;
        int i,j;
        printf("nombre premier : 2\n");
        for ( i = 3 ; i < 100 ; i++)
        {
            for ( j = i-1; j > 1 ; j--)
            {
                r = i % j;
                if( r == 0 )
                {
                    i = i + 1;
    
                }
    
            }
            printf("nombre premier : %ld\n", i);
        }
        return 0;
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      29 septembre 2008 à 2:29:28

      Bonsoir,

      Dans ta condition, quand tu passes à l'entier suivant i = i + 1 il faut aussi que tu réinitialises j juste après comme ceci j = i - 1

      Remarque : ton algorithme est très loin d'être optimisé, pour commencer tu pourrais initialiser j par la racine de i.. :)
      • Partager sur Facebook
      • Partager sur Twitter
      Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
        29 septembre 2008 à 13:35:23

        Puis mémoriser les nombres premiers trouvés dans un tableau et ne tester qu'avec ces nombres.
        • Partager sur Facebook
        • Partager sur Twitter

        Le crayon la gomme et le papier sont les meilleurs outils du programmeur !

          30 septembre 2008 à 23:53:49

          j'ai pas bien compris vous pouvez m'orienter par des exemples merci encore
          • Partager sur Facebook
          • Partager sur Twitter
            2 octobre 2008 à 11:38:35

            un nombre premier est un nombre dont aucun nombre inferieure ou egal a sa racine carrée ne le divise, ainsi tu fais une boucle pour ce test, et si le modulo est <>0 alors tu affiche le nombre, et c'est tout.
            en passant tu veux qu'on t'aide a reussir a le resoudre par toi meme ou tu veux une correction, dans ce cas je met le code corrige , alors la reponse?
            • Partager sur Facebook
            • Partager sur Twitter
              3 octobre 2008 à 13:37:52

              merci cher ami, je vais essayer de le faire apré tu me donne la correction afin que je puisse evolué desolé pour le retard
              • Partager sur Facebook
              • Partager sur Twitter
                4 octobre 2008 à 21:16:28

                Bonsoir,

                Citation : yousilb

                un nombre premier est un nombre dont aucun nombre inferieure ou egal a sa racine carrée ne le divise

                Oh!!!
                Un nombre premier est un nombre qui admet en tant que diviseurs lui-même et 1...
                cf.Wikipedia.
                • Partager sur Facebook
                • Partager sur Twitter
                  4 octobre 2008 à 22:09:26

                  Il a sans doute oublié "excepté 1"... mais aucune nombre supérieur à n ne peut être diviseur de n, et si il n'existe aucun diviseur de n compris entre 2 et racine(n), il n'existe aucun diviseur de n compris entre racine(n) et n - 1.
                  Donc ce qu'il dit n'est pas tout à fait inexact.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    4 octobre 2008 à 22:40:05

                    Citation : lou reed

                    Bonsoir,

                    Citation : yousilb

                    un nombre premier est un nombre dont aucun nombre inferieure ou egal a sa racine carrée ne le divise

                    Oh!!!
                    Un nombre premier est un nombre qui admet en tant que diviseurs lui-même et 1...
                    cf.Wikipedia.




                    Mon prof de maths dit que un nombre premier est un nombre qui a seulement 2 diviseurs, donc 1 n'est pas premier
                    car 1 a pour diviseur 1 et c'est qu'un seul diviseur.

                    Mais je me mouilles pas, c'est selon mon prof de maths.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 octobre 2008 à 22:41:54

                      Et il a raison. 1 n'est pas premier.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        8 octobre 2008 à 21:45:05

                        je suis daccord avec vous tout les nombres premiers en que deux diviseurs, eux memes et 1 donc comment peut on faire un programme qui va nous afficher tout les nombre premiers de 1 a 100 par exemple
                        • Partager sur Facebook
                        • Partager sur Twitter
                          8 octobre 2008 à 22:02:20

                          Facile, il suffit simplement d'implementer l'algorithme de factorisation par crible sur les corps de nombres généralisé :p:-°:D

                          Plus serieusement l'algo naif (le plus simple et le moins optimisé) est le suivant

                          int estPremier(int n)
                          {
                              if (n == 1)  // cas particulier
                              {
                                  return 0; 
                              }
                          
                              int i;
                              for ( i=2; i<n; i++)  // on va tester tout les nombres entre 1 et n
                              {
                                  if ( n%i == 0 )  // si ce nombre divise n
                                  {
                                      return 0; // n n'est pas premier
                                  }
                              }
                              return 1; // n est premier, car on n'a pas trouvé de diviseurs 
                          }
                          
                          void afficherPremiers(int n)
                          {
                              int i;
                              for (i=1; i<=n ; i++) // on teste chaque entier entre 1 et n
                              {
                                   if ( estPremier(i) )
                                   {
                                        afficher i;
                                   }
                              }
                          }
                          


                          Après il existe quelques optimisations faciles a realiser:
                          - tout nombre premier superieur a 2 est impair
                          => divise par 2 le temps d'execution du programme

                          - si 2 n'est pas un diviseur de n, alors tout les diviseurs de n sont impairs
                          => divise encore par 2 le temps d'execution du programme

                          - si un nombre n'est pas premier, il peut s'ecrire sous la forme n = a * b, en supposant a <= b, on a n >= a * a. Ce qui veut dire que si on a i*i > n et que l'on n'a pas trouvé de diviseurs de n plus petit que i, alors n est premier
                          • Partager sur Facebook
                          • Partager sur Twitter
                            9 octobre 2008 à 20:04:14

                            trés interessant ton code je vais l'etudier et le bien comprendre merci infiniment a toi je vais bientot te repondre
                            • Partager sur Facebook
                            • Partager sur Twitter

                            nombre premier

                            × 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