ホームページ  >  記事  >  バックエンド開発  >  範囲内の素数を効率的にマッピングするにはどうすればよいですか?

範囲内の素数を効率的にマッピングするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-04 20:20:02269ブラウズ

How to Efficiently Map Prime Numbers within a Range?

範囲内の素数の効率的なマッピング

指定された範囲内の素数を決定することは、一般的なプログラミング タスクです。このタスクのメモリ消費を最適化するために、与えられた範囲 (1, N] の素数を表す最もコンパクトなデータ構造を作成するアルゴリズムを探します。

素数範囲マッピングの提案されたアルゴリズム

一般的なプライム テストに最も効果的なアルゴリズムは AKS アルゴリズムですが、限られた範囲内での実用的な目的では、次のような古典的なアルゴリズムが使用されます。 O(sqrt(N)) アルゴリズムは効率的な解決策を提供できます。

def isprime(n):
    if n == 2 or n == 3:
        return True
    if n % 2 == 0 or n % 3 == 0:
        return False
    # Check prime divisors of the form 6k - 1 and 6k + 1
    i = 5
    w = 2
    while i * i <= n:
        if n % i == 0:
            return False
        i += w
        w = 6 - w
    return True

アルゴリズムの分析

このアルゴリズムは、すべての素数がより大きいという事実に依存しています。 3 よりも大きいものは、6k - 1 または 6k 1 のいずれかの形式になります。このパターンで潜在的な素約数を反復処理することにより、アルゴリズムは効率的に実行されます。

追加の考慮事項

特に範囲が限られている場合にさらに高速化するには、フェルマーの小定理に基づいた擬似素数テストを実装すると、ただし、このアプローチには範囲制限があります。

キー最適化

このアルゴリズムにおける最も重要な最適化は、潜在的な素数としてすべての偶数を削除することです。この最適化により、必要なチェックの数が大幅に削減され、パフォーマンスの向上につながります。

以上が範囲内の素数を効率的にマッピングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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