-1
votes

L'algorithme de test de primalité échoue

J'ai créé un algorithme de test de primalité simple, mais cela échoue à des chiffres comme 15. Pourquoi?

number = int(input("Test if Prime: "))

print ("Is " + str(number) + " Prime?: ")

for i in range (2, number): 
  if number % i == 0: 
    break
  elif number % i != 0: 
    print ("Yes")


8 commentaires

échoue signifie quand vous entrez 15 mais imprime oui non?


Essayez un pour ... sinon .


@Tserenjamts Oui, mais il imprime "Oui. Non."


@Johnnymopp Yup, été là, ne fonctionne pas (ajouté à la question)


Bien sûr, pour le premier essai 15% 2 == 1 de sorte qu'il dit oui alors 15% 3 == 0 non < / Code> Vous devez donc voir un exemple d'algorithmes de nombres premiers, il y en a beaucoup. :))


Exemple: Ideone.com/TSA5WF . Remarque C'est un pour ... sinon , pas si ... sinon .


@Johnnymopps très clair; Merci!


Avez-vous déjà essayé de déboguer? Comparez la sortie de débogage avec ce que vous feriez avec le stylo et le papier.


3 Réponses :


1
votes

Vous avez votre état d'autre à l'intérieur de la boucle. À tout moment de temps, il ne vérifiera qu'une seule valeur ...

Modification de votre boucle Pour imprimer le numéro en vérification: P>

flag = False
for i in range (2, number): 
  if number % i == 0: 
    print ("No")
    flag = True
    break
if (!flag)
  print("Yes")


1 commentaires

le drapeau est juste une variable ... vous pouvez le renommer autre chose. Vous appelez le drapeau comme il s'agit d'un "drapeau" (dans notre cas, il nous dit si un numéro n'est pas prime)



0
votes

Voici un refacteur rapide que j'ai basé sur votre exemple: xxx


0 commentaires

0
votes

En raison de la mauvaise indentation, sinon sera exécuté pour tous les non-diviseurs de nombres impairs xxx


1 commentaires

Je l'ai changé, j'espère que ça ressemble à ce que tu essayais de faire