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
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:

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
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
0
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
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.
0