这是我对一个函数的解决方案,它应该返回第一对两个素数,间隔g与极限m,n之间的间隔g,否则为零。红宝石 - 可能效率低下的算法
这是来自codewars.com的kata,它通过了初步测试。但是,当我提交它时,我收到一条错误消息,说由于算法效率低下,它需要很多时间(8000ms +)。
有人能告诉我什么是减慢代码,以及它应该如何优化?
require 'prime'
def gap(g, m, n)
range = (m..n).to_a
primes = []
range.each { |num| primes.push(num) if Prime.prime?(num)}
primes.each_index do |count|
prv , nxt = primes[count], primes[count+1]
if !nxt.is_a? Integer
return nil
end
if nxt - prv == g
return [prv, nxt]
end
end
end
感谢提示。但是,我仍然得到相同的错误信息: 进程被终止。花了超过8000ms完成 –
如果您可以使用Ruby主模块,我会在该模块中查找将为您生成范围内的素数的方法,而不是使用p对范围内的所有数字进行雾测试。通常这些模块的优化可能比大多数专业程序员都要好得多。一个小的优化示例,其中模块的主要生成器中可能会有更多更复杂的示例,您不需要对任何偶数进行主要测试(就像您当前所做的那样)。 –
你也可以考虑https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes,具有指定差距的素数是否必须是连续的? – user12341234