3

プロジェクトオイラーでいくつかの問題を開始しました。質問の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(私のターミナル?)が計算が終了するまで値を保持するのはなぜですか?代わりに値を見つけるので、リアルタイムで値を確認できますか?これを行うためのより良い方法はありますか?

4

1 に答える 1

12

を追加してみてくださいSTDOUT.sync = trueSTDOUT.flushの後に試すこともできますputsここにいくつかの詳細情報。

于 2011-05-10T03:45:42.767 に答える