2013-06-09 2 views
0

Fonction qui vérifie si l'entrée est principale. Je sais qu'il a été couvert à plusieurs reprises, mais mon code pour une raison quelconque me donne vrai pour x = 32 et je ne peux pas comprendre pourquoiFonction qui vérifie la correction de primalité?

def is_prime(x): 
    if x < 2: 
     return False 
    elif x == 2: 
     return True 
    else: 
     for i in range(3,x): #Ignore sqrt(x) improvement 
      if x%i == 0: 
       return False 
      else : 
       return True 
+0

Vous ne vérifiez pas la divisibilité de 2. – starblue

Répondre

1

for i in range(3,x):

Cette première va de pair avec le numéro 3. Comme 32 % 3 != 0, il renvoie True. Ensuite, la fonction se brise, car elle a renvoyé une valeur.

envisage de mettre return True après la boucle for:

for i in range(3,x): #Ignore sqrt(x) improvement 
    if x % i == 0: 
     return False 
return True 

Maintenant, si un nombre est divisible, il sera immédiatement pause et retour False. Mais si aucun nombre ne passe en 32, la boucle for finira et elle renverra True.

En outre, si vous utilisez python 2.x, il sera plus rapide d'utiliser xrange(), car cela renvoie un générateur :).

Questions connexes