少し前に某所でエラトステネスの篩の実装が正しくないとかなんとかで話題になったことがあった*1*2。そこでの結論が「アイデアとしては正しいが高速化のための実装としては間違い」みたいなところに落ち着いてしまってイマイチ腑に落ちなかったので少し調べた。 背景の整理 一般的に知られるエラトステネスの篩について エラトステネスの篩は、次のようなアルゴリズムとして紹介されることが多い。 適当な上限を定める。 上限までの長さの論理値配列を作成し、全ての値を真で初期化する。 真または偽のいずれかを素数を示す目印とするが、ここでは真で素数を示すものとする。 1番目の値を偽にする。 配列を先頭から順に見ていく。 値が真だったら、その値のインデックスの整数倍(1倍を除く)のインデックスにある値を偽にする。 例:3番目のインデックスであれば、6番目、9番目、12番目…の値を偽にする。 このとき、確認する範囲をイン

