Я не знаю почему, но когда я запускаю следующий код, он возвращает 9 как простое число - PullRequest
1 голос
/ 09 июля 2020

Я должен был создать функцию, которая принимает целое число и возвращает, если оно простое или нет, но по какой-то причине она возвращает 9 как простое число

def prime(x):
    if x == 0 or x == 1:
        return "not prime"
    elif x == 2:
           return "prime"
    else:
      for numbers in range(2,x):
       if x % numbers == 0:
            return "not prime"
       else:
            return "prime"

for i in range(20):
    print (i, prime(i))

Ответы [ 2 ]

2 голосов
/ 09 июля 2020

Первые числа либо четные, либо простые.

9 - первое число, где действительно проявляется ошибка в вашем коде.

Ошибка: вы возвращаете «простое», если один тест не прошел. Поскольку 9 % 2 не равно 0, тест здесь не проходит.

перепишите (наивно) как:

  for numbers in range(2,x):
     if x % numbers == 0:
          return "not prime"
  return "prime"

, чтобы, если l oop заканчивается без возврата, число будет простым.

Обратите внимание, что есть лучшие и более быстрые способы проверки простоты. Например, не l oop до x-1, а возводите в квадрат root из x (включительно), поскольку после этого значения не может существовать делителей.

 for numbers in range(2,int(x**0.5)+1):
0 голосов
/ 09 июля 2020

Ваш код вернет ответ на первой итерации, после чего он прекратит итерацию:

for numbers in range(2,x):
  if x % numbers == 0:
    return "not prime"
  else:
    return "prime"

Это начинается с 2, и если он входит в x равномерно, он возвращает не простое число, если нет она возвращает простое число и в любом случае останавливается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...