2016-12-18 1 views
0

У меня есть небольшая проблема, когда мне нужно определить, является ли число, x простым числом или нет. х будет случайным образом целое положительное число, и я получаю следующее сообщение, когда я выполнить код:определение, если случайный Int является простым или нет

Your function fails on is_prime(2). It returns None when it should return True. 

Мой код:

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

я хочу цикл, а перебирать п == 2 до к n == (x-1), но он, похоже, не делает этого! что я делаю неправильно?

+0

«Я хочу, чтобы цикл while повторялся через n == 2 до n == (x-1)» - разве это не значит, что работа цикла 'for'? – user2357112

+0

да, я имею в виду for loop sorry :) –

+1

Зачем вы ввели цикл while? – user2357112

ответ

0

Вы могли бы написать эту функцию гораздо более проще:

import math 
def is_prime(n): 
    if n % 2 == 0 and n > 2: 
     return False 
    for i in range(3, int(math.sqrt(n)) + 1, 2): 
     if n % i == 0: 
      return False 
    return True 

Таким образом, ваш призыв к is_prime (2) будет не пройти, если испытание и не будет использоваться в течение запуска и просто возвращающие ,

Все остальные простые числа должны быть проверены, если они больше 3 и даже не совпадают.

+0

Я предпочитаю 'if (n% 2 == 0): return n == 2' или даже' if (n <= 2): return n == 2) ', который сохраняет мод и sqrt. – rossum

Смежные вопросы