[programmation C]Nombre premier
kreuk801
Messages postés
23
Statut
Membre
-
fiddy Messages postés 11653 Statut Contributeur -
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 :
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 :)
A voir également:
- [programmation C]Nombre premier
- Nombre de jours entre deux dates excel - Guide
- Nombre facile - Télécharger - Outils professionnels
- Application de programmation - Guide
- Pourquoi certaines personnes apparaissent en premier sur messenger ✓ - Forum Facebook
- Faites afficher avec un fond coloré les cellules qui contiennent une valeur comprise entre 250 et 350. quel nombre est dessiné en surbrillance ? ✓ - Forum Excel
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 :
Cdlt,
/*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;
}
}
}