[programmation C]Nombre premier

Bonjour,

voila dans un exercice que j'ai a faire je doit creer une fonction qui me donne les nombre premier inferieur a N (N etant entré par l'utilisateur ).

Voila mon code :

  
//Fonction disant si le nombre est premier 
int premier (int x) 
{ 
   int i,y; 

   y=sqrt(x)+1; 
   if (x%2==0) 
      { 
      return 0; 
      } 
    else 
      { 
      for (i = 3 ; i < y; i+=2) 
        if (y % i != 0) 
          { 
           return 0; 
          } 
        else 
          { 
           return 1; 
          } 
      } 

    } 

// Fonction qui affiche les nombres premiers inferieur à n 
int premier2 (int x) 
{ 
    int j,a; 

    // Boucle permettant de scanner les nombres entre 0 et n 
    for (j=1; j<x;j++) 
    { 
        a = premier(j); 
        // Affichage des nombres si ils sont premiers 
        if (a == 1) 
        { 
            printf("%d ",j); 
        } 
    } 
    printf("\n\n"); 
}


malheureusement , la 2e fonction ne m'affiche pas tout le nombre premier , je n'arrive pas a trouver mon erreur si quelqu'un peut m'aider se serait simpas merci :)

2 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    C'est ta première fonction qui est fausse.

    /*Ce n'est pas y%i mais x%i*/
    /*Ce n'est pas si x%i est différent de 0 qu'il faut renvoyer 0, mais si c'est égal à 0*/
    if (y % i != 0)
    {
    return 0;
    }
    /*Ce n'est pas parce que le nombre n'est pas divisible par i que le nombre est premier. Il faut vérifier pour tous les nombres du for*/
    else
    {
    return 1;
    }


    Ce qu'il faut faire c'est :
    for(...) {
       if ( ...) 
           return 0;
    }
    /*là on a vérifié pour tous les nombres du for.*/
    return 1;
    


    Cdlt,
    1. Merci pour ton aide , voila ma fonction corrigé , il y a encore quelque nombre non premier dedans mais je ne vois toujours pas pk...

      int premier (int x)
      {
         int i,y;
      
         y=sqrt(x)+1;
         if (x%2==0)//permet de voir si le nombre est paire ou non
            {
            return 0;
            }
          else
            {
            for (i = 1 ; i < y; i+=2)//boucle sans les diviseurs paires
            {
              if (x % i == 0)
                 return 0;
              else
                 return 1;
            }
            }
      }
      
      1. Contributeur
        Tas pas bien respecté ce que j'ai dit dans mon précédent post.
        Il faut sortir le return 1 de la boucle for. Relis mon exemple.
        Cdlt