Tag: 计算

Ruby没有实时输出

我在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(我的终端?)保持值直到计算结束? 相反,我可以实时看到这些值吗? 你有更好的方法吗?

如何有效地提取Ruby数组中的重复元素?

我有一个类似[1,1,1,2,4,6,3,3]的数组,我希望得到重复元素的列表,在本例中为[1,3]。 我写了这个: my_array.select{|obj|my_array.count(obj)>1}.uniq 但它的效率很低(o(n²))。 你有更好的主意吗? 如果可能简洁。 谢谢