ホームページ >バックエンド開発 >Python チュートリアル >Python で指定された数値 N より下のすべての素数を見つける最速の方法は何ですか?

Python で指定された数値 N より下のすべての素数を見つける最速の方法は何ですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-21 09:28:09799ブラウズ

What's the Fastest Way to Find All Prime Numbers Below a Given Number N in Python?

N より下のすべての素数をリストする最速の方法

Python には、指定された数 N より下のすべての素数をリストする効率的なアルゴリズムがいくつかあります。最も高速なアルゴリズムの 1 つは、ふるい分けと算術演算を組み合わせて素数を識別するアトキンのふるいです。

その他の効率的なアルゴリズム

アトキンのふるいに加えて、素数を列挙するための他の効率的なアルゴリズムには次のものがあります。

  • Rho アルゴリズム
  • スンダラムさんアルゴリズム
  • AKS 素数性テスト
  • ミラーラビン素数性テスト

適切なアルゴリズムの選択

最適なアルゴリズム特定のアプリケーションは、N のサイズと必要な速度によって異なります。 N の値が小さい場合、エラトステネスのふるいはシンプルで効率的な選択です。 N の値が大きい場合は、アトキンのふるいまたは上記の他のアルゴリズムのいずれかがより適している可能性があります。

アトキンのふるいの Python 実装は次のとおりです。

def sieve_of_atkin(limit):
    """Return a list of prime numbers up to the given limit."""

    # Create a list of all integers up to the given limit.
    numbers = list(range(limit + 1))

    # Mark 0 and 1 as non-prime.
    numbers[0] = numbers[1] = 0

    # Iterate over all odd numbers up to the square root of the limit.
    for i in range(3, int(limit**0.5) + 1, 2):

        # If i is prime, mark all multiples of i as non-prime.
        if numbers[i]:
            for j in range(i * i, limit + 1, i * 2):
                numbers[j] = 0

    # Return the list of prime numbers.
    return [number for number in numbers if number]

追加の考慮事項

  • N の値がさらに大きい場合は、次のことが必要になる場合があります。スンダラムのふるいやエラトステネスのふるいなど、より洗練されたアルゴリズムを使用します。
  • アルゴリズムの選択は、メモリの可用性や必要な精度など、他の要因にも影響される可能性があります。

以上がPython で指定された数値 N より下のすべての素数を見つける最速の方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。