Nombres premiers

Signaler
Messages postés
1
Date d'inscription
mardi 24 septembre 2019
Statut
Membre
Dernière intervention
24 septembre 2019
-
Reivax962
Messages postés
3527
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
12 décembre 2019
-
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

3 réponses

Messages postés
1576
Date d'inscription
mercredi 3 octobre 2007
Statut
Membre
Dernière intervention
24 septembre 2019
307
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
Messages postés
3527
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
12 décembre 2019
920
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.