Sondage :

Publicité




Partenaires




Jmax-Hardware

mxdev.net

feedburner
donate.gif


383 visiteur(s) en ligne
Forums d'entraide informatique - Les forums de PCW
[Résolu] Exercice en C , trouver si un nombre est premier - Version imprimable

+- Forums d'entraide informatique - Les forums de PCW (http://forum.pcinfo-web.com)
+-- Forum : Forum Informatique (/forumdisplay.php?fid=39)
+--- Forum : Internet - Navigation -Programmation - Scripts - Developpement (/forumdisplay.php?fid=8)
+--- Discussion : [Résolu] Exercice en C , trouver si un nombre est premier (/showthread.php?tid=2075)



[Résolu] Exercice en C , trouver si un nombre est premier - Chamaille - 07-02-2008 16:29 PM

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


- Troll - 07-02-2008 17:13 PM

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


- Chamaille - 07-02-2008 21:11 PM

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...


- Troll - 07-02-2008 22:43 PM

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 ]


- Chamaille - 08-02-2008 16:11 PM

j'ai finalement réussi merci!


- Troll - 08-02-2008 19:05 PM

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


- Chamaille - 08-02-2008 19:37 PM

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


- Troll - 08-02-2008 19:40 PM

D'accord Smile


- TotofTeam - 08-02-2008 21:08 PM

Salut, il est sympathique de mettre de l'indentation dans tes codes sources, pour une meilleur visibilité Wink ( tabulation )


[Résolu] Exercice en C , trouver si un nombre est premier - Troll - 06-06-2008 05:06 AM

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