我在欧拉计划上开始了一些问题。其中之一是:
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(我的终端?)要等到计算结束才释放这些值?我能否实时查看它找到的值?你有更好的方法吗?
$|
。为了提高速度,无论是写入磁盘还是屏幕,I/O都是缓冲的。该缓冲可能会导致部分写入的问题,因此我们经常关闭它,以便尽快将数据写入磁盘或其目的地。 - the Tin Man