Algorithme (nombre premier)
Fermé
Dr.Mimo
Messages postés
4
Date d'inscription
samedi 1 décembre 2012
Statut
Membre
Dernière intervention
1 décembre 2012
-
1 déc. 2012 à 00:27
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 - 1 déc. 2012 à 17:58
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 - 1 déc. 2012 à 17:58
A voir également:
- Algorithme nombre premier
- Algorithme verifier si un nombre est premier - Meilleures réponses
- Algorithme qui détermine si un nombre est premier - Meilleures réponses
- Dans cette présentation, trouvez l'étoile. quel nombre contient-elle ? ✓ - Forum Word
- Nombre facile - Télécharger - Outils professionnels
- Gto nombre episode ✓ - Forum Jeux vidéo
- En raison d'un nombre important d'échec de connexion snapchat - Forum Snapchat
- Dans la présentation, sans modifier leur position dans la feuille : passez le rectangle noir en arrière-plan ; passez le rectangle bleu au premier plan ; passez le rectangle hachuré au premier plan. quel mot apparaît ? ✓ - Forum LibreOffice / OpenOffice
4 réponses
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
1 déc. 2012 à 16:46
1 déc. 2012 à 16:46
"Mais l'algorithme marche sans problème ... normalement. (essayé)"
Oui, mais tu as demandé "le critiquer si il contient des défauts"
Ce que Heliotte veut dire (je pense) c'est qu'il n'est pas utile de faire ton x++ et donc compter le nombre de diviseurs, car il suffit qu'il y en ait un seul pour que ce ne soit pas un nombre premier. Si par exemple ton nombre est pair, tu dois t'arrêter dès que tu as vu que c'était divisible par 2, pas continuer comme tu le fais jusqu'à n/2.
De plus le choix de n/2 est également mauvais, en effet le plus grand diviseur d'un nombre sera sqrt(n), on aura alors n=sqrt(n)*sqrt(n), c'est inutile de chercher des diviseurs au delà. Dans le détail, si n est divisé par d>sqrt(n) cela signifie qu'il est aussi divisé par n/d<sqrt(n), c'est à dire qu'on aura déjà identifié le diviseur !
Remarque : il est également inutile de tester des diviseurs pairs (à part 2), car si le nombre est divisible par un nombre pair, alors 2 l'aura déjà divisé. Donc au lieu de tester tout les i, tu peux te limiter aux impairs :
Oui, mais tu as demandé "le critiquer si il contient des défauts"
Ce que Heliotte veut dire (je pense) c'est qu'il n'est pas utile de faire ton x++ et donc compter le nombre de diviseurs, car il suffit qu'il y en ait un seul pour que ce ne soit pas un nombre premier. Si par exemple ton nombre est pair, tu dois t'arrêter dès que tu as vu que c'était divisible par 2, pas continuer comme tu le fais jusqu'à n/2.
De plus le choix de n/2 est également mauvais, en effet le plus grand diviseur d'un nombre sera sqrt(n), on aura alors n=sqrt(n)*sqrt(n), c'est inutile de chercher des diviseurs au delà. Dans le détail, si n est divisé par d>sqrt(n) cela signifie qu'il est aussi divisé par n/d<sqrt(n), c'est à dire qu'on aura déjà identifié le diviseur !
Remarque : il est également inutile de tester des diviseurs pairs (à part 2), car si le nombre est divisible par un nombre pair, alors 2 l'aura déjà divisé. Donc au lieu de tester tout les i, tu peux te limiter aux impairs :
int x=1; if (n%2==0) x=(n==2); else { int s = (int) sqrt(n); for (i=3; i<=s; i+=2) if(n % i == 0) { x=0; break; } } if (x) printf("ce nombre est premier"); else printf("ce nombre n'est pas premier");
1 déc. 2012 à 17:58
Je voulais faire simple, mais cette proposition est très complète .. milles mercis.