Оптимизация генерации простых чисел: методы и примеры кода

Чтобы оптимизировать поиск простых чисел, вы можете использовать несколько методов. Вот несколько подходов и примеры кода на Python:

  1. Наивный подход.
    Наивный подход заключается в переборе всех чисел от 2 до N-1 и проверке, делит ли какое-либо из них N поровну. Если ни один из них этого не делает, то N — простое число.
def is_prime_naive(n):
    if n <= 1:
        return False
    for i in range(2, n):
        if n % i == 0:
            return False
    return True
  1. Решето Эратосфена:
    Решето Эратосфена — это эффективный алгоритм для поиска всех простых чисел до заданного предела. Он работает путем итеративной маркировки кратных каждого простого числа, начиная с 2, как составных (не простых).
def sieve_of_eratosthenes(n):
    primes = [True] * (n + 1)
    primes[0] = primes[1] = False
    p = 2
    while p * p <= n:
        if primes[p]:
            for i in range(p * p, n + 1, p):
                primes[i] = False
        p += 1
    return [i for i in range(n + 1) if primes[i]]
  1. Тест на простоту Миллера-Рабина.
    Тест на простоту Миллера-Рабина — это вероятностный алгоритм, который определяет, является ли данное число простым или составным.
import random
def miller_rabin(n, k=5):
    if n <= 1:
        return False
    if n <= 3:
        return True
    def check_composite(a, d, s, n):
        x = pow(a, d, n)
        if x == 1 or x == n - 1:
            return False
        for _ in range(s - 1):
            x = pow(x, 2, n)
            if x == n - 1:
                return False
        return True
    s, d = 0, n - 1
    while d % 2 == 0:
        d //= 2
        s += 1
    for _ in range(k):
        a = random.randint(2, n - 2)
        if check_composite(a, d, s, n):
            return False
    return True