這是我對一個函數的解決方案,它應該返回第一對兩個素數,間隔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