2016-07-26 30 views
0

我正在使用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) 

回答

2

Ruby 1.9的有一个内置的总理级,你可以使用:

require 'prime' 
Prime.take_while{|p| p < limit}.reduce(:+)