Генератор простых чисел Python: эффективные методы генерации простых чисел

Вот несколько методов генерации простых чисел в Python:

Метод 1: Решето Эратосфена
Решето Эратосфена — это эффективный алгоритм для поиска всех простых чисел до заданного предела.

def sieve_of_eratosthenes(limit):
    primes = [True] * (limit + 1)
    primes[0] = primes[1] = False
    p = 2
    while p * p <= limit:
        if primes[p]:
            for i in range(p * p, limit + 1, p):
                primes[i] = False
        p += 1
    return [x for x in range(limit + 1) if primes[x]]

Метод 2: Пробное деление
Пробное деление – это простой метод, при котором каждое число делится на все числа, меньшие его квадратного корня, для проверки делимости.

def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n0.5) + 1):
        if n % i == 0:
            return False
    return True
def prime_generator(limit):
    primes = []
    for num in range(2, limit):
        if is_prime(num):
            primes.append(num)
    return primes

Метод 3: тест на простоту Миллера-Рабина
Тест на простоту Миллера-Рабина — это вероятностный алгоритм, который обеспечивает быстрый способ проверить, является ли число простым.

import random
def miller_rabin(n, k=5):
    if n == 2 or n == 3:
        return True
    if n % 2 == 0:
        return False
    def check(a, s, d, n):
        x = pow(a, d, n)
        if x == 1 or x == n - 1:
            return True
        for _ in range(s - 1):
            x = pow(x, 2, n)
            if x == n - 1:
                return True
        return False
    s, d = 0, n - 1
    while d % 2 == 0:
        s += 1
        d //= 2
    for _ in range(k):
        a = random.randint(2, n - 2)
        if not check(a, s, d, n):
            return False
    return True
def prime_generator_miller_rabin(limit):
    primes = []
    for num in range(2, limit):
        if miller_rabin(num):
            primes.append(num)
    return primes