Nombres premiers
Fermé
Chizqiyah
Messages postés
1
Date d'inscription
mardi 24 septembre 2019
Statut
Membre
Dernière intervention
24 septembre 2019
-
Modifié le 24 sept. 2019 à 16:23
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 24 sept. 2019 à 16:35
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 24 sept. 2019 à 16:35
A voir également:
- Afficher les 100 premiers nombres premiers python
- Citizen code python avis - Accueil - Outils
- Afficher appdata - Guide
- 100 mo en go - Forum Mobile
- Afficher les commentaires word - Guide
2 réponses
Archeus01
Messages postés
1571
Date d'inscription
mercredi 3 octobre 2007
Statut
Membre
Dernière intervention
9 juin 2022
450
Modifié le 24 sept. 2019 à 16:29
Modifié le 24 sept. 2019 à 16:29
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
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
24 sept. 2019 à 16:35
24 sept. 2019 à 16:35
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.