[programmation C]Nombre premier

kreuk801 Messages postés 23 Statut Membre -  
fiddy Messages postés 11653 Statut Contributeur -
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

fiddy Messages postés 11653 Statut Contributeur 1 847
 
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,
0
kreuk801 Messages postés 23 Statut Membre
 
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;
      }
      }
}
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
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
0