【发布时间】:2010-06-04 12:27:03
【问题描述】:
我正在尝试解决 Project Euler 中的Problem #5。该代码适用于该示例,当我检查从 1 到 10 的数字时,结果是 2520,这是正确的。但是当我检查从 1 到 20 的数字时,代码并没有停止运行。
这里是:
num = 0
while true
num += 1
check = true
for i in 1..20
break unless check
check = num%i==0
end
break if check
end
File.open("__RESULT__.txt", "w+").write num
【问题讨论】:
-
Marc 已经给出了完美的答案。或者:由于每个数字都必须能被 20 整除,
num += 20将为您提供 20 倍的加速。另外,请使用for i in 2..20,因为每个数字都可以被 1 整除 -
作为风格说明:您的代码可以更惯用地写成
inf = 1.0/0.0; num = (1..inf).find {|n| (1.20).all? {|i| x%i == 0}}- 但这不会改变计算时间过长的事实。 -
刚刚检查了我在 Ruby 中提出的稍微优化的版本。这里大约需要 1 分钟,这很难达到 Project Euler 的限制,并且比我在 2 秒内完成相同操作的 C++ 版本慢得多。
标签: ruby infinite-loop