【发布时间】:2015-04-03 14:34:33
【问题描述】:
为了好玩,我决定用 ruby 编写 Eratosthenes 筛子的代码。只是为了好玩,因为我知道有一个库函数。另外,我认为它会很快。但我发现它不是,至少在我的 ruby 1.9.3 中,我的上网本快几倍,甚至在 c 中也没有。为什么会这样。
库实现:
require 'prime'
primes = Prime.each(1_000_000).to_a
print primes.size
puts
我的红宝石:
sieve = Array.new(1_000_000, true)
sieve[0..1] = [false, false]
for number in 2...Math.sqrt(sieve.size)
if sieve[number]
for multiple in (number ** 2...sieve.size).step(number)
sieve[multiple] = false
end
end
end
primes = []
for number in 2...1_000_000
if sieve[number]
primes << number
end
end
print primes.size
puts
库很慢。
【问题讨论】:
-
我认为是时候升级到 2.2
-
如果您还想更快一点,请使用 stackoverflow.com/questions/17892313/… 中讨论的数字轮。