2015-05-31 2 views
1

Я пытался создать функцию в Python, который проверяет данное число является ли простое число, так что я написал этот код:Простые числа, умноженные на 3 показано, как простые числа

def is_prime(x): 
    if x<2: 
     return False 
    elif x==2: 
     return True 
    else: 
     for n in range(2,x): 
      if (x%n)==0: 
       return False 
      else: 
       return True 

По какой-то причине , каждое число, которое является суммой (Prime_number * 3), отображается как первичный номер (например, они показаны как простые числа: 9,21,15,25 ...) Может ли кто-нибудь увидеть проблему с моим кодом ?

+2

Это было бы хорошо для вас: http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ –

ответ

1

Потому что вы return в самой первой итерации цикла. Вы не можете знать, что что-то простое, пока цикл не исчерпан. Поэтому не возвращайте True до завершения итераций.

def is_prime(x): 
    if x<2: 
     return False 
    elif x==2: 
     return True 
    else: 
     for n in range(2,x): 
      if (x%n)==0: 
       return False 
     return True 
2

Это происходит потому, что вы вернетесь из is_prime на самой первой итерации цикла. Вы проверяете, может ли x делиться на 2, вернуть True, если это так, и False в противном случае.

Убрать else пункт из цикла и вернуть True после его окончания.

def is_prime(x): 
    if x<2: 
     return False 
    elif x==2: 
     return True 
    else: 
     for n in range(2,x): 
      if (x%n)==0: 
       return False 
     return True 
0

Более эффективный метод будет перебирать только до квадратного корня x.

import math; 
def isPrime(x): 
    if x < 2: 
     return False; 
    elif x == 2: 
     return True; 
    else: 
     for n in range(2, int(math.sqrt(x))+1): 
      if x%n == 0: 
       return False; 
     return True; 

# Test the method for first 50 natural numbers 
for i in range(51): 
    if isPrime(i): 
     print i; 
Смежные вопросы