以下は、上限パラメーターまでの素数を見つけるためのエラトステネスのふるいの実装です。
現在、パラメーターが 2,000,000 の場合、コードは約 2 秒で完了します。数値を nil に設定し、それらの数値を 1 つのステップで削除するのではなく圧縮することで、1 つの余分なステップを作成していることがわかります。
これを実装するにはどうすればよいですか?私のコードの速度を改善するための他の提案はありますか?
def sieve(upper)
i = 0
list = (2..upper).to_a
(2..Math.sqrt(upper)).each do |mult|
init = mult + i
(init..upper-1).step(mult) do |index|
list[index] = nil
end
i += 1
end
list.compact
end