Алгоритм теста на первичность не пройден - PullRequest
0 голосов
/ 06 ноября 2019

Я создал простой алгоритм проверки простоты, но он не работает для чисел, подобных 15. Почему?

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

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

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

Я пробовал утверждение elif с другими вариантами, но оно все равно не работает:

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")

Любая помощь приветствуется.

Ответы [ 3 ]

1 голос
/ 06 ноября 2019

У вас есть другое условие внутри цикла. В любой момент времени он будет проверять только одно значение ...

Изменение цикла for для вывода числа, которое он проверяет:

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

распечатка (длячисло = 15):

2
Yes
3
No

Как вы знаете, работает, если оно печатает число «Нет» - 1 раз

Чтобы немного изменить то, что вы сделали, мы можем просто изменить его на:

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

Все, что это делает, это выдвигает оператор печати за пределы цикла (чтобы число было простым, оно должно быть не делимым на все числа, меньшие его). Этот флаг гарантирует, что вы печатаете только True или False (вы не хотите распечатывать оба)

0 голосов
/ 06 ноября 2019

из-за неправильного отступа, иначе будет выполнено для всех неделителей нечетных чисел

for i in range (2, number):
  if number % i == 0:
    print ("No")
      break
else: 
  print ("Yes")
0 голосов
/ 06 ноября 2019

Вот быстрый рефакторинг, который я сделал на основе вашего примера:

def is_prime_simple(number):
    is_prime = True
    for i in range(2, number):
        if number % i == 0:
            is_prime = False
            break
    return is_prime

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

print ("Is " + str(number) + " Prime?: ")
print('Yes' if is_prime_simple(number) else 'No')

...