Я читал блог Джеффа Knupp, и я наткнулся на этом простой небольшой скрипт:Пытаясь понять этот простой Python код
import math
def is_prime(n):
if n > 1:
if n == 2:
return True
if n % 2 == 0:
return False
for current in range(3, int(math.sqrt(n) + 1), 2):
if n % current == 0:
return False
return True
return False
print(is_prime(17))
(примечание:. Я добавил импорт математика в начале Вы можете увидеть оригинал здесь : http://www.jeffknupp.com/blog/2013/04/07/improve-your-python-yield-and-generators-explained/)
Это все довольно просто, и я получаю большинство из них, но я не уверен, что происходит с его использованием функции диапазона. Я никогда не использовал его таким образом или видел, что кто-то еще использует его таким образом, но тогда я новичок. Что означает, что функция диапазона имеет три параметра и как это выполнить тестирование для грубости?
Также (и извинения, если это глупый вопрос), но самое последнее утверждение «return False». Это так, что если число передается функции, которая меньше единицы (и, следовательно, не может быть простой), функция не будет даже тратить свое время на оценку этого числа, не так ли?
Хорошо, спасибо, что освободили это для меня. В чем смысл использования квадратного корня ввода? Не может ли простое число иметь потенциальные факторы, превышающие его квадратный корень? –
Да. Точно один. Сам. –
Конечно. Мой вопрос: почему допустимо использовать sqrt + 1 этого числа в качестве верхней границы функции диапазона? Я попробовал несколько примеров от руки, чтобы понять, что происходит, например, путем прокрутки на 459 (17 X 27). Я обнаружил, что sqrt + 1 всегда был немного больше, чем меньшее число, которое я использовал. Но если я использую 7919 (что просто, но давайте предположим, что пока не знаю), какое свойство простых чисел позволит мне перестать искать факторы после sqrt + 1? –