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