0

以下は、上限パラメーターまでの素数を見つけるためのエラトステネスのふるいの実装です。

現在、パラメーターが 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
4

1 に答える 1