2016-07-26 82 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(:+)