3
我在Project Euler上開始了一些問題。其中一個問題:Ruby不會實時輸出
13195的主要因素是5,7,13和29. 數字600851475143的最大素因子是多少?
我已經寫了一些代碼...和它的作品:
class Integer
def primeFactors
load('/home/arseno/ruby/lib/prime.rb')
a = []
for i in (1..self)
div = self.to_f/i.to_f
if((div==div.to_i)&&(Prime.prime?(i)))
a << i
end
end
a
end
end
puts 13195.primeFactors
輸出:
5
7
13
29
到目前爲止好!現在,當我輸入600851475143時,終端掛起(理所當然,它計算了很多東西!)所以我試圖做的是在循環/ if中放入puts i
,以便將輸出捕獲爲它通過...實時地迭代。
但是通過將這個puts i
放入循環中,Ruby在迭代過程中不會輸出變量;相反,它保存在某種緩衝區中的值,並在計算完成時將其刷新。
這個特殊的問題是Ruby永遠無法計算(它已經運行了10分鐘),我懷疑它是在浮點數轉換中。
爲什麼Ruby(我的終端?)保持值直到計算結束?我可以實時看到這些值嗎?你有更好的方式來做到這一點?
太神奇了,謝謝! – 2011-05-10 03:53:26
這不是太神奇,它是許多語言的標準部分。在Perl中,它將是全局的'$ |'。爲了提高速度,I/O被緩衝,無論是磁盤還是屏幕。緩衝可能會導致部分寫入問題,所以我們經常關閉它以便儘可能快地將數據存入磁盤或其目標。 – 2011-05-10 05:28:49