範囲 (1, N) の最適にコンパクトな素数マッピングの決定
最もコンパクトな素数マッピングを見つけることは、困難な作業となる場合があります。理想的なアルゴリズムでは、指定された範囲 (1, N) のメモリ消費量が最も少ないデータ構造が生成されます。
考えられるアプローチの 1 つは、一般的なプライム テストで最も高速であると考えられる AKS アルゴリズムです。大きな素数の場合、メルセンヌ素数などの特殊な形式の素数を探索することが有益である可能性があります。
ただし、限られた範囲内での汎用素数テストの場合は、より実用的で効率的なアルゴリズムを使用できます。
<code class="python">def isprime(n): """Returns True if n is prime.""" if n == 2 or n == 3: return True if n % 2 == 0 or n % 3 == 0: return False i = 5 w = 2 while i * i <= n: if n % i == 0: return False i += w w = 6 - w return True</code>
このアルゴリズムは、素数 (2 と 3 を除く) が 6k - 1 または 6k 1 のいずれかの形式であるという事実を利用します。このアルゴリズムは、この範囲内の約数を効率的にチェックするため、範囲内の素数を決定するのに適しています。
速度が最優先され、範囲が明確に定義されている場合、フェルマーの小定理に基づいた擬似素数テストを実装すると、効率をさらに高めることができます。偽陽性 (カーマイケル数) を事前に計算し、二分探索を使用すると、さらに高速なアプローチが得られますが、範囲が制限されるという制限が伴います。
以上が範囲 (1, N) の最もコンパクトな素数マッピングを決定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。