[programmation C]Nombre premier

kreuk801 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   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
  2. kreuk801 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
     
    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
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   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