私はかなり高速な素数ジェネレーターを実装しており、 Eratosthenes のふるいでいくつかの最適化を行って、いくつかの素晴らしい結果を得ました。特に、アルゴリズムの準備段階では、次のように 2 と 3 の倍数をすべてスキップします。
template<class Sieve, class SizeT>
void PrimeGenerator<Sieve, SizeT>::factorize()
{
SizeT c = 2;
m_sieve[2] = 1;
m_sieve[3] = 1;
for (SizeT i=5; i<m_size; i += c, c = 6 - c)
m_sieve[i] = 1;
}
これは、エラトステネスのふるいm_sieve
によるブール配列です。これは素数 2 と 3 のみを考慮した一種の Wheel 因数分解であり、パターン 2、4、2、4、.. に従って増加していると思います。
私がやりたいことは、おそらく素数 2、3、および 5 を考慮して、より大きなホイールを実装することです。
私はすでにそれに関する多くのドキュメントを読みましたが、エラトステネスのふるいを使用した実装は見当たりませんでした...サンプルコードは大いに役立ちますが、いくつかのヒントも役立ちます:)ありがとう。