0
以下兩個功能,這些功能檢查,如果一個數是素數:與測試時每個比在Ruby中都慢嗎?
def prime1?(prime_candidate)
return true if [1, 2].include? prime_candidate
range = 2.upto(Math.sqrt(prime_candidate).ceil).to_a
i = 0
while i < range.count
return false if prime_candidate % range[i] == 0
range = range.reject { |j| j % range[i] == 0 }
end
true
end
def prime2?(prime_candidate)
return true if [1, 2].include? prime_candidate
range = 2.upto(Math.sqrt(prime_candidate).ceil).to_a
range.each do |i|
return false if prime_candidate % i == 0
range = range.reject { |j| j % i == 0 }
end
true
end
產生以下benchamrking結果非常大的素數(5915587277):
user system total real
prime1: 2.500000 0.010000 2.510000 ( 2.499585)
prime2: 20.700000 0.030000 20.730000 (20.717267)
這是爲什麼?是否因爲第二個功能range
未被reject
修改,所以each
正在迭代原始長range
?
是的 - 迭代範圍不會改變你的每種情況。變量指向新值,但這並不重要,因爲您已經在原始值上調用了每個值 – 2014-10-09 08:46:05
小數nit - 1不是質數 – rohit89 2014-10-09 09:03:03
您是絕對正確的。 – 2014-10-09 09:15:04