Nombres premiers
Chizqiyah
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
Reivax962 Messages postés 3672 Date d'inscription Statut Membre Dernière intervention -
Reivax962 Messages postés 3672 Date d'inscription Statut Membre Dernière intervention -
Bonjour, j'aimerais tester si un nombre est premier ou pas, mais mon code ci-dessous ne fonctionne pas correctement. Pouvez-vous m'aider svp.
n = int(input("Entrer une valeur: ")) for i in range(2, n-1): if n % i == 0: print("n'est pas premier") else: print("est premier") n = int(input("Entrer une valeur: "))
Configuration: Windows / Chrome 76.0.3809.132
A voir également:
- Afficher les 100 premiers nombres premiers python
- Citizen code python avis - Accueil - Outils
- Afficher appdata - Guide
- Excel afficher les 0 devant un nombre - Guide
- Afficher toutes les lignes masquées excel ✓ - Forum Excel
- Afficher les commentaires word - Guide
2 réponses
Bonjour,
Je n'ai pas fait de pyton mais La le problème, c'est l'algo. ça va afficher du texte avant d'aller jusqu'à la fin de la boucle donc ça devrait plus être un truc du genre (à mettre en pyhton évidemment):
n = int(input("Entrer une valeur: "))
bool isPremier = true
for i in range(2, n-1):
if n % i == 0:
isPremier =false
if(isPremier)
print("n'est pas premier")
else:
print("est premier")
n = int(input("Entrer une valeur: "))
Cordialement,
Archeus
Je n'ai pas fait de pyton mais La le problème, c'est l'algo. ça va afficher du texte avant d'aller jusqu'à la fin de la boucle donc ça devrait plus être un truc du genre (à mettre en pyhton évidemment):
n = int(input("Entrer une valeur: "))
bool isPremier = true
for i in range(2, n-1):
if n % i == 0:
isPremier =false
if(isPremier)
print("n'est pas premier")
else:
print("est premier")
n = int(input("Entrer une valeur: "))
Cordialement,
Archeus
Bonjour,
Ton problème vient du fait que tu fais tes "print" à chaque test de divisibilité.
Or il faut plutôt attendre d'avoir tout testé, ou d'être tombé sur un diviseur, pour donner la réponse.
Du coup, la boucle FOR n'est pas la plus adaptée puisqu'elle correspond, dans l'idée, à un nombre prédéfini d'itération. Un while, par contre, te permettra de boucler tant que la condition n'est pas remplie.
Au final, je te suggère donc de définir un booléen "diviseur_trouve = False", qui servira dans ta condition de boucle en plus de la limité n-1. Ce booléen doit passer à true quand n%i == 0.
Et une fois sorti de la boucle, soit diviseur_trouve vaut True, et donc ce n'est pas premier ; soit il vaut False, et donc c'est premier.
Xavier
PS : Concernant tes bornes de boucle (2, n-1)... Tu peux te contenter de t'arrêter au plus grand entier inférieur à Racine(n), tu gagneras beaucoup en temps de calcul.
Ton problème vient du fait que tu fais tes "print" à chaque test de divisibilité.
Or il faut plutôt attendre d'avoir tout testé, ou d'être tombé sur un diviseur, pour donner la réponse.
Du coup, la boucle FOR n'est pas la plus adaptée puisqu'elle correspond, dans l'idée, à un nombre prédéfini d'itération. Un while, par contre, te permettra de boucler tant que la condition n'est pas remplie.
Au final, je te suggère donc de définir un booléen "diviseur_trouve = False", qui servira dans ta condition de boucle en plus de la limité n-1. Ce booléen doit passer à true quand n%i == 0.
Et une fois sorti de la boucle, soit diviseur_trouve vaut True, et donc ce n'est pas premier ; soit il vaut False, et donc c'est premier.
Xavier
PS : Concernant tes bornes de boucle (2, n-1)... Tu peux te contenter de t'arrêter au plus grand entier inférieur à Racine(n), tu gagneras beaucoup en temps de calcul.