Forums d'entraide informatique - Les forums de PCW

Version complète : Exercice en C , trouver si un nombre est premier
Vous consultez actuellement la version basse qualité d'un document. Voir la version complète avec le bon formatage.
Bonjour!

J'ai un petit exercice à faire (je dois le terminer demain matin alors si vous pouviez m'aider??!!):
le but est de vérifier si un nombre donné est premier ou non. On peut utiliser l'instruction break.

NB: Un nombre est premier si et seulement s'il est divisible seulement pas 1 et lui-même!

Voici ce que j'ai fait:

Citation :#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main(void)
{
int nombre=10, i=2;
int premiertest, deuxiemetest;


// Besoin du test /1 ?
while(i<=nombre)
{
premiertest=nombre%1;
deuxiemetest=nombre%i;
if(premiertest!=0)
{
printf("%d n'est pas un nombre premier\n",nombre);
i=nombre+1;
}
else if(premiertest==0 &amp;&amp; deuxiemetest!=0 &amp;&amp; nombre<i)
{
i++;
}
else if (premiertest==0 &amp;&amp; deuxiemetest==0 &amp;&amp; nombre!=i)
{
printf("%d n'est pas un nombre premier\n",nombre);
i=nombre+1;
}
else if (premiertest==0 &amp;&amp; deuxiemetest==0 &amp;&amp; nombre==i)
printf("%d est un nombre premier\n",nombre);


}
return 0;
}


Pourriez-vous vérifier si c'est correct? Et me donner des idées pour l'améliorer? Par exemple en diminuant le nombre de conditions à tester si c'est possible?
Lorsque je choisis nombre=10, on me dit bien qu'il n'est pas premier, mais lorsque je choisis un nombre que je sais premier par exemple 11, le programme se lance et n'affiche rien, vraiment rien! Il ne se ferme même pas.

Que faire d'ailleurs lorsqu'un programme fait ça?


Merci beaucoup d'avance! Big Grin
Salut Chamaille ! Smile


Alors tout d'abord, content de te revoir Wink

Ensuite, je remarque, bien que j'ai des connaissances quasi-inexistantes en C, que ton programme fonctionne à mon goût de manière étrange.

Tout d'abord tu vérifies s'il se divise par 1 si je ne me trompe : aucun besoin puisque tous les nombres sont divisibles par un (à part peut-être les irréels, mais ça m'étonnerait que tu doives gérer les irréels).

Ensuite tu défini un paramètre qui est le maximum d'itérations de ta boucle, cependant ce paramètre est défini manuellement, donc faut avoir une idée du nombre d'itérations à tester... Ce qui risque d'être dur avec par exemple 0938530 Smile

Le théorème :
Un nombre est premier s'il n'est pas divisible par tous les chiffres impairs situés entre 1 et sa racine.

Donc ton parametre (i) tu le met = sqrt(nombre)

Si cela ne suffit pas à te sortir de la galère, un peu de lecture


Voilà, à bientôt Wink
Merci pour ta réponse!

Pour la division par 1 je pense que je vais la retirer oui.
Sinon à propos de la lecture que tu m'as donnée, ils utilisent les booléens si je ne me trompe.
Le problème c'est que je ne peux pas encore l'utiliser: début des cours de C oblige, le prof ne l'a pas encore fait...
Bah fais comme je t'ai dit Wink

Tu fais une fonction nbpremier(nombre)

tu calcule :
int max = SQRT(nombre)+0.5; (le + 0.5 c'est au cas ou nombre serait un carré parfait).


Ensuite tu fais une boucle for :

for(i=1;i<=max;i+2)
{
tu vérifies si nombre est divisible par i
Si oui -> Pas premier, si non : on continue
}
Si la boucle n'a pas été arrêté par un affichage, le nombre est premier, tu affiche que le nombre est premier Smile
[Je pourrais te faire ca en PHP mais en C je ne peux me contenter que de te donner la méthode Wink ]
j'ai finalement réussi merci!
Salut Smile

Content pour toi, est-ce que tu as réussi suite à ce que je t'ai conseillé ?

Si tu pouvais nous donner ton code fonctionnel je suis sûr que ça en aiderait d'autres Wink
oui l'idée d'utiliser la racine carrée m'a aidé par exemple,
pour ce qui est du code, je l'afficherai (si j'y pense) dès lors que je le récupérerai: je l'ai laissé sur l'ordi de ma fac... Confused
D'accord Smile
Salut, il est sympathique de mettre de l'indentation dans tes codes sources, pour une meilleur visibilité Wink ( tabulation )
Chamaille a écrit :oui l'idée d'utiliser la racine carrée m'a aidé par exemple,
pour ce qui est du code, je l'afficherai (si j'y pense) dès lors que je le récupérerai: je l'ai laissé sur l'ordi de ma fac... Confused



Ton ordi est toujours pas revenu de la FAC ? Smile
URLs de référence