gpt4 book ai didi

ruby - 为什么我的 ruby​​ 脚本执行时间太长?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:58:47 26 4
gpt4 key购买 nike

我正在尝试解决来自 http://www.beatmycode.com/challenge/5/take 的问题,我写了一个脚本:

def is_prime?(num)
(2...num).each do |divisor|
return false if num % divisor == 0
end
true
end
def circular_prime(num)
circular_primes = []
if num < 2
return false
end
(2..num-1).each do |number|
is_prime?(number)
result = [number.to_s]
(0..number.to_s.size-2).each do |x|
var = result.last.split('')
result << var.unshift(var.pop).join if var.uniq.size != 1
end
circular_primes << result if result.all?{ |x| is_prime? x.to_i }
end
end

当我用 10100100010_000 测试时,脚本执行得非常快,但是当我使用 100_000 进行测试时,shell 显示了一个 Interrupt 错误。弱点在哪里,我该如何解决?

最佳答案

您的 is_prime? 方法太慢了。一些小的改进可能是:

  • 您不必一直测试 divisor 直到 num,它的平方根num 就够了。
  • 您可以跳过所有偶数,因为 2 是唯一的偶数数。

但是,这仍然不够好,因为算法很慢。由于您需要在连续整数之间生成质数,请考虑使用 Sieve of Eratosthenes .


当然有 prime标准库,但我假设您想手动执行此操作。

关于ruby - 为什么我的 ruby​​ 脚本执行时间太长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32205743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com