Для контекста я пытаюсь решить Проект Эйлера 3 , используя Python:
Каков наибольший простой множитель числа 600851475143?
В качестве первого шага к этому я пытаюсь написать функцию, которая возвращает, является ли число простым как логическое значение. Я сделал первую попытку и проверил, как это было написано ранее. Я получил следующий код:
def isprime(x):
limit = x**0.5
i = 2
if x < 2:
return False
elif x == 2:
return True
else:
while i <= limit:
if x%i == 0:
return False
i = i + 1
else:
return True
По какой-то причине приведенный выше код не работает идеально. Например, isprime(99)
вернет True.
Пожалуйста, кто-нибудь может помочь мне понять, почему это не работает? Я стараюсь не просто копировать и вставлять чужой код, так как хочу точно понять, что здесь происходит.
Мне кажется, проблема в заключительном утверждении else
. Я говорю это потому, что логика c гласит «в случае, если x%i == 0
, это число не простое», но в нем явно не говорится, что делать в случае, если нет x%i
итераций == 0
.
Любая помощь по этому вопросу будет принята с благодарностью! Я не обязательно ищу самый чистый и удобный способ сделать это, но больше просто пытаюсь сначала заставить этот код работать.