def find_prime(n)
numbers = []
for i in 2..n
numbers[i] = i
end
for i in 2..Math.sqrt(n)
#next unless numbers[i]
(i*i).step(n,i) do |j|
numbers[j] = nil
end
end
numbers.compact!
end
用ruby自帶的庫求的話链方,更簡單
require 'prime'
Prime.take_while {|e| e < n}
對比一下:
n = 10000000
Benchmark.bm(10) do |t|
t.report("find_prime") { find_prime(n) }
t.report("Prime") {Prime.take_while {|e| e < n}}
end
結(jié)果:
user system total real
find_prime 2.465000 0.078000 2.543000 ( 2.562321)
Prime 1.326000 0.031000 1.357000 ( 1.373573)
n = 10000000時蔓同,也沒有超過3秒血久。
n = 1000000時屹培,結(jié)果如下:
user system total real
find_prime 0.203000 0.031000 0.234000 ( 0.239333)
Prime 0.187000 0.000000 0.187000 ( 0.185985)
還是很可觀的箱蟆。
在可以用自帶庫的情況下沟绪,最好用自帶的庫,如果不能用空猜,用這個方法效率也是不錯绽慈。