在Ruby中加速数组函数

在Ruby中加速数组函数,ruby,arrays,Ruby,Arrays,我有一个简单的方法,找到素数,把它们放在一个数组中,然后求和。有哪些可能的步骤可以加快速度 def prime?(number, array) array.each do |x| if number % x == 0 return false end end true end def sum_prime(number) i = 0 prime = 1 output = [2] while prime < number if

我有一个简单的方法,找到素数,把它们放在一个数组中,然后求和。有哪些可能的步骤可以加快速度

def prime?(number, array)
  array.each do |x|
    if number % x == 0
      return false
    end
  end
  true
end

def sum_prime(number)
  i = 0
  prime = 1
  output = [2]
  while prime < number
    if prime?(prime, output)
      i += 1
      output << prime if prime != 1
      p prime
    end 
    prime += 2
  end
  output.inject(:+)
end

sum_prime(200000)
def素数?(数字,数组)
数组。每个do | x|
如果数字%x==0
返回错误
结束
结束
真的
结束
定义和素数(数字)
i=0
素数=1
输出=[2]
当素数<数时
if prime?(prime,输出)
i+=1

输出这应该有效。它采用了其他人的建议:

require 'prime'
def sum_prime(limit)
  Prime.each(limit).inject(0) {|sum, num| sum + num}
end
puts sum_prime(200000)

假设必须将值存储在数组中,
array.inject(:+)
的速度似乎与ruby中的速度差不多。唯一的其他建议是使用像C这样的编译语言,但即使这样,改进也可能微不足道。然后,您可能知道是否可以更快地完成它:)对于非常大的sum_prime,您可以将请求发送到更快的语言。您还可以通过使用现有的已知值启动一个哈希并从那里开始,来实现一些捷径:shortCut={100=>sum_prime(100),1000=>sum_prime(1000),ad nausum。然后你可以从最小值开始计算,并为自己节省大量内存。@mr.musicman如果它不需要在一个数组中,那么在每个
prime
可用时,将每个值添加到
sum+=prime
中。如果你的目标只是对prime求和,你可能会过得更好。