Простое число — это любое целое число, больше 1, которое не имеет делителей, кроме 1 и самого себя. Вот чистая и эффективная реализация:
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
2 до квадратного корня числа nn % i == 0, делитель найден и мы возвращаем FalseTrueЭто ключевая оптимизация. Если у числа n есть делитель больше его квадратного корня, то у него обязательно есть соответствующий делитель меньше квадратного корня. Поэтому проверки до int(n**0.5) + 1 достаточно, чтобы избежать лишних итераций.
O(√n) — значительно быстрее, чем наивный подход O(n)O(1) — дополнительная память не используетсяprint(is_prime(7)) # True
print(is_prime(10)) # False
print(is_prime(1)) # False
Функция is_prime() должна проверять делители только до квадратного корня из n, потому что если n имеет делитель больший, чем его квадратный корень, то у него должен быть и соответствующий делитель меньший, чем квадратный корень.
Новый — ещё не проверен сообществом
Вы