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