Программа, которая проверяет, является ли число простым числом
Здравствуйте, я создал эту программу, чтобы проверить, является ли число простым числом. Это работает, но почему-то говорит, что 999 - простое число. Где моя ошибка Было бы здорово, если бы кто-то объяснил. Благодарю вас!
Вот моя программа:
number = raw_input('Enter a Number: ')
nnumber = int(number)
prime_range = range(2, nnumber)
for x in prime_range:
if nnumber % x == 0:
print 'Not a Prime Number!'
break
else:
print 'Prime Number!'
break
5 ответов
Проследи это. x
начинается с 2
потом тесты 999 % 2
; это 1
, так else
выполняется "Простое число!" печатается, и цикл прерывается. Программа заканчивается.
Вместо этого вам нужно напечатать "Простое число!" только когда вы проверили все возможности для x
, Самый простой способ сделать это - сделать отступ else:
(и удалить break
там):
for x in prime_range:
if nnumber % x == 0:
print 'Not a Prime Number!'
break
else:
print 'Prime Number!'
Python выполняется else
из for
когда for
завершает без разрыва: именно то, что вы хотите.
Если число простое, это означает, что никакое число не делит его равномерно, кроме 1 и самого себя. Это означает, что вам нужно проверить каждое число под ним, прежде чем вы сможете сказать, что число простое.
В вашем коде вы выходите из цикла на первой итерации - независимо от того, насколько велико число.
Суждение имеет проблему, может быть только 1, или простое число делится само по себе. Вы судите, только 2 из целого не является простым числом, вы должны использовать двойной цикл, чтобы выполнить условия суждения
Ваш существующий код проверяет только каждый раз, если введенное вами число делится на 2, а затем выходит из цикла, в зависимости от способа. Вы должны проверить все значения ниже и выйти, только если он обнаружит, что это НЕ простое число:
number = raw_input('Enter a Number: ')
nnumber = int(number)
prime_range = range(2, nnumber)
prime = True
for x in prime_range:
if nnumber % x == 0:
prime = False
break
if prime:
print 'Prime Number!'
else:
print 'Not a Prime Number!'
Вы проверяете только для 1-й итерации. Независимо от того, является ли он простым или нет, он выходит из цикла, поскольку один из разделов, т. Е. "If" или "else", будет выполняться, вызывая разрыв цикла. Логика заключалась бы в проверке всего диапазона чисел от 2 до (число /2), и если он делит число в некоторой точке, он не будет простым числом. Если цикл завершается после итерации по всему циклу, то это простое число. Надеюсь, вы сможете сделать это сейчас. Спасибо!.