Nbre premier.

Résolu/Fermé
Sabetodo Messages postés 120 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 18 août 2010 - 14 janv. 2009 à 20:22
Sabetodo Messages postés 120 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 18 août 2010 - 15 janv. 2009 à 09:51
Bonjour,
Bonjour,
salut le gars. J'ai un petit probleme avec ma fonction.En fait je suis ecrire une fonction qui renvoie 1 si le nombre est premier ,et 0 si le nombre ne l'est pas.je l'ai fait et ca a l'air de marcher. Quand je lui passe 5 ou 7 en parametre il affiche 1.jusque la c'est bon. mais pour 4 ou 6 il affiche toujours 1, alors qu'il est cense retourner 0.
voici ma fonction.

 int my_putchar(char c)
  {
    write(1, &c, 1);  
  }
  
int my_is_prime(int nombre)
{
    int i,cp=0;
  

    if((nombre!=0) && (nombre!=1))
     {
        for(i=2;i<=nombre;i++)
          {  
            if((nombre%i)==0)
              {
                 cp++;
              }
          }
         if(cp>0)
          {
             return(0);
          }
          else
           return(1);
         
     }
    return(0);
}

int main()
{
  int nombre=11;
  
  printf("%d\n",my_is_prime(nombre));
  
}

4 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
14 janv. 2009 à 20:35
Salut,

Voici quelques exemples pour t'inspirer
Vérifier si un nombre entier est un nombre premier en C
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
14 janv. 2009 à 20:49
Salut,
Bizarre sur ma machine, cela me retourne 0 dans tous les cas. Et cela est normale puisque tu fais une boucle :
for(i=2;i<=nombre;i++)
. Donc à la dernière itération i vaudra nombre et nombre%i vaudra toujours 0. Ce qui incrémentera cp d'où le retour de 0.
Pour cela, tu transformes la condition du for en : i<nombre égalité stricte.
Sinon, ton algorithme est bien compliqué. Tu n'as pas besoin d'incrémenter une variable cp. A la place du cp++, tu fais un return 0. Dans ce cas là, t'es assuré que tu as un diviseur et que donc le nombre n'est pas premier. Et à la fin de la boucle, tu fais un return 1.

Cdlt
0
Sabetodo Messages postés 120 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 18 août 2010 3
15 janv. 2009 à 09:51
ok fiddy.merci pour ton aide.en fait mon probleme se trouvait a ce niveau de la boucle for comme tu l'a bien dit.ce devrait etre une egalite stricte.
0
Je vais reprendre mes annotations de ce matin...
Que d'erreurs !!! ;=))) mais, rassure-toi, on en a tous fait et malheureusement on en fait toujours.

Toutefois, le compilateur doit râler, et il faudrait au moins corriger ces erreurs-là:
- le 'main' déclaré 'int' n'a pas de valeur de retour,
- idem pour la fonction 'my_putchar',

Erreur de conception:
- le test 'if((nombre%i)==0)' lorsque 'i=nombre' sera toujours vrai, donc on aura toujours le même résultat quelquesoit le nombre.

Je m'arrête là.
Bon courage.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
14 janv. 2009 à 21:00
Re,

- le 'main' déclaré 'int' n'a pas de valeur de retour,

int main(){

     /* tes instructions */
.........................
    return 0;
}
- idem pour la fonction 'my_putchar',

Il n'y a pas de return dans tas fonction.
0