我正在使用ruby,我的想法是创建一个方法,将所有素数添加到给定值以下。我现在的工作原理,但是当我使用像1000万这样的更大数字时,它需要永远运行。我想知道是否有一种方法可以优化下面的代码,使其运行速度更快,即使有这么大的数字
def self.sum_to(limit)
primes = (2..limit).select do |n|
(2..Math.sqrt(n)).none? do |i|
(n % i).zero?
end
end
sum = primes.reduce(:+)
end
puts Primes.sum_to(10000000)
答案 0 :(得分:2)
Ruby 1.9有一个你可以使用的内置Prime类:
require 'prime'
Prime.take_while{|p| p < limit}.reduce(:+)