[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 -
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 :
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 :)
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
-
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, -
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; } } }