下面是我对 Eratosthenes 筛的实现,用于查找最高参数上限的素数。
目前,当我的参数为 2,000,000 时,我的代码在大约 2 秒内完成。我看到我通过将数字设置为零,然后压缩而不是一步删除这些数字,从而多出了一步。
我将如何实施呢?您还有其他建议来提高我的代码速度吗?
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