Хороший детерминистический способ найти относительно небольшие простые числа - это использовать сито .
Математический принцип, лежащий в основе этого метода, заключается в следующем: проверить,число простое, достаточно проверить, что оно не делится на другие простые числа.
import math
def is_prime(n):
# Prepare our Sieve, for readability we make index match the number by adding 0 and 1
primes = [False] * 2 + [True] * (n - 1)
# Remove non-primes
for x in range(2, int(math.sqrt(n) + 1)):
if primes[x]:
primes[2*x::x] = [False] * (n // x - 1)
return primes[n]
# Or use the following to return all primes:
# return {x for x, is_prime in enumerate(primes) if is_prime}
print(is_prime(13)) # True
Для возможности повторного использования вы можете адаптировать приведенный выше код для возврата set
всех простых чисел до n
.