在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求和,你可能会过得更好。