プロジェクトオイラーでいくつかの問題を開始しました。質問の1つ:
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を入力すると、ターミナルがハングアップします(当然のことながら、多くの処理を計算しています!)そこで、私が試みたのはputs i
、ループ/ if内に配置して、出力をキャプチャすることでした。繰り返しました...リアルタイムで。
しかし、これputs i
をループに入れることにより、Rubyは反復全体を通して変数を出力しません。代わりに、ある種のバッファ内の値を保持し、計算が完了するとそれらをフラッシュします。
この特定の問題は、Rubyが計算するのに永遠にかかっています(10分間実行されています)。float変換にあると思われます。
Ruby(私のターミナル?)が計算が終了するまで値を保持するのはなぜですか?代わりに値を見つけるので、リアルタイムで値を確認できますか?これを行うためのより良い方法はありますか?