NOMBRE PREMIER

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
- - Dernière réponse : cs_exar
Messages postés
286
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
22 avril 2012
- 28 août 2008 à 11:45
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/47784-nombre-premier

cs_exar
Messages postés
286
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
22 avril 2012
1 -
JFRANCOIS: tout-à-fait exact ! Beaucoup l'ignorent !
cs_jfrancois
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
-
"0 et 1 sont premier... (bon pour zero c'est un cas particulier mais pour 1 il respect bien la régle des nombres premiers : un nombre est premier si et seulement si il est divisible par 1 et par lui même... 1 est divisible seulement par 1 et par lui même CQFD)"

NON ! 1 n'est pas premier. Il ne respecte pas la règle qui dit qu'un nombre naturel est premier si il admet exactement deux diviseurs DISTINCTS : 1 et lui-même. Or avec 1 les deux diviseurs sont identiques. Le premier nombre premier est 2.
coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30 -
mais euh... tu connais l'instruction break ?

ce code contient plus de printf que de lignes interessantes...
lynxtyle
Messages postés
79
Date d'inscription
samedi 25 septembre 2004
Statut
Membre
Dernière intervention
31 octobre 2011
2 -
sans oublier : c'est du C pas sur C++
sur ces 3 lignes de code ça change pas grand chose mais c'est important de le souligner quand même :P
lynxtyle
Messages postés
79
Date d'inscription
samedi 25 septembre 2004
Statut
Membre
Dernière intervention
31 octobre 2011
2 -
"ce logiciel vous permet de vérifier si un nombre est entier ou pas /
C'est simple et très facile ..."

nombre premier, nombre entier... on voit que tu maitrise le sujet pour toi les deux c'est du kifkif

donc oui à supprimer car en plus d'être bourrin et mal présenté, ton raisonnement mathématique est complétement faux... comme ton anglais d'ailleur ("DEVELLOPPED BY C++", "logiciel realise par WOODPECKER3", "Tante_KANZA_by_SIMO" et "WOODPECKER3 COMPANY"... faudrait savoir comment tu t'appel et... oh mon dieu je ferai jamais appel à ta multinational même si elle a le copyright des nombres premiers ou entier^^)

ensuite niveau grosses erreurs :
"int n" et "if ((n != 1)&&(n!= 0))"... sans rentrer dans le point de vu mathématique de la recherche de nombre premier ici il y a une grosse faille... et oui si on rentre -1 pour n??? et encore pire pour la suite... car si on rentre un nombre négatif encore plus petit ton "for (i = 2; i < n; i++, compteur++)" ne marche plus... bon suffit de le remplacer par un unsigned int et ça régle déjà ce premier souci...

ensuite pour n égal 0 ou 1 pourquoi tu écris 2 fois le même code? tu aurai plus vite fait de le marquer qu'une fois et faire la vérif par "if (n <= 1 )" (bien sur seulement si tu as remplacé ton "int n" par "unsigned int n")
et grand mathématicien que tu es : 0 et 1 sont premier... (bon pour zero c'est un cas particulier mais pour 1 il respect bien la régle des nombres premiers : un nombre est premier si et seulement si il est divisible par 1 et par lui même... 1 est divisible seulement par 1 et par lui même CQFD)
ceci est aussi valable pour 2... hors ton programme le considère aussi comme non premier :(

bon pour petifa "dés que test passe a 1 (pourquoi pas true)" simplement que notre programmeur est fénéant et qu'il a défini test comme un int et pas comme un bool sinon 1 et true serait revenu au même (donc 1 c'est plus rapide même si c'est moins lisible... mais vu le nombre de commentaire de la source, la lisibilité ne devait pas être sa priorité... surtout sur une source avec copyright^^)
et pour "A quoi sert compteur???" la réponse est simple : à rien du tout ! (même pour le débogage il y a aucune utilité)
par contre même si sa boucle fait tout les nombres paires elle n'est pas pour autant fausse... et n'est juste pas optimisé... oui, pour optimiser on pourrait diviser par 2 puis après seulement par les nombres impaires jusqu'à n/2 (et oui après n/2 de toute façon le résultat appartiendra toujours à ]1;2[ )... et on économise ainsi 3/4 des calculs (merci petifa)
et oui aussi pour "dés que test passe a 1 [...] la boucle devrait s'arrêter en même temps"

donc voilà un le même en plus potable et corrigé :

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

int main()
{
unsigned int i, n;
_Bool Premier;
Premier = true;

printf("saisissez un nombre\n\n");
scanf ("%d", &n);


if ( n <= 2 )
printf("\n%d est premier",n);

else
{
if (n % 2 == 0)
Premier = false;

else
{
for (i 3; i < (n/2); i i+2)
if (n % i == 0)
{
Premier = false;
break;
}
}
if ( Premier == false )
printf("\n%d n'est pas premier",n);
else
printf("\n%d est premier",n);

}

system("PAUSE"); //beurk c'est par portable
return 0;
}

voilà désolé mais j'ai pas mis de copyright...
PS : je l'ai pas testé (j'ai pas d'ordi) mais il doit mathématiquement être correct... si des erreurs hésitez pas à les corriger ;)
cs_petifa
Messages postés
215
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
10 mars 2014
-
plusieurs choses.
Le nom des te fichiers peuvent être mieux choisis, inutile de mettre ton pseudo dans le nom des fichiers
ton code dans le .CPP est "bourrin", ça sert a quoi de marquer que c toi qui l'ai fait? autant mettre des commentaires au début de ton code, et non au résultat de l'exécution de ton programme
ta boucle (qui recherche si c'est un nombre premier) est complètement fausse, tu compares avec des nombre paires alors que si 2 ne passe pas tous les nombres paires ensuite ne passeront donc ta boucle sera trop longue
de plus dés que test passe a 1 (pourquoi pas true) la boucle devrait s'arrêter en même temps
# test = false;
# for (i = 3; i < n && !test; i++, compteur++)
A quoi sert compteur???

D'accord avec BruNews,

Bon source pas très utile
cs_JCDjcd
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
2 -
le copyright sur une crible d'eratosthene, on aura tout vu !
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16 -
Il y a de bons exemples déjà mis sur cppfrance, il faut t'en inspirer car ta méthode est dans le pur style bourrin, à exclure.

NE SERA PAS CONSERVE.