指定された範囲内の素数を決定することは、一般的なプログラミング タスクです。このタスクのメモリ消費を最適化するために、与えられた範囲 (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 サイトの他の関連記事を参照してください。