我已经在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(我的终端?)一直保留这些值直到计算结束?我可以在找到它们时实时查看这些值吗?你有更好的方法吗?