我正在努力解決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整除 – schnaader 2010-06-04 12:40:41
作爲樣式註釋:您的代碼可能更習慣性地寫爲'inf = 1.0/0.0; num =(1..inf).find {| n | (1.20)。所有? {|我| x%i == 0}}' - 但這不會改變計算時間太長的事實。 – sepp2k 2010-06-04 12:41:40
剛剛檢查了我在Ruby中提出的稍微優化的版本。這需要大約1分鐘,這對於歐拉項目來說很難,並且比我的C++版本慢2秒鐘。 – schnaader 2010-06-04 12:48:11