3

我已经在Project Euler上开始了一些问题。问题之一:

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 分钟),我怀疑它是在浮点转换中。

为什么 Ruby(我的终端?)一直保留这些值直到计算结束?我可以在找到它们时实时查看这些值吗?你有更好的方法吗?

4

1 回答 1

12

尝试添加一个STDOUT.sync = true. 您也可以STDOUT.flushputs. 更多信息在这里

于 2011-05-10T03:45:42.767 回答