Ruby可以减少的限制?

时间:2015-04-11 00:44:49

标签: ruby enumerable

我正在尝试解决Project Euler上的问题5。我正在使用.reduce(:+)方法,它似乎适用于长达16个的数组。然后,当我尝试传递任何更大的(20)答案时,它永远不会计算我的最终值。

require 'pp'
pp factors = (1..20).to_a
n = 1

result = []
loop do
  factors.each { |x| result << n % x }
  if result.reduce(:+) == 0
        break
  else
        result = []
  end
  n += 1
end
pp n

3 个答案:

答案 0 :(得分:0)

事实证明你可以用Integer#lcm来解决这个问题。是的。在一行也是。

(1..20).to_a.reduce(:lcm)

答案 1 :(得分:0)

我用     array.inject(:+) 并且永远不会遇到阵列长度的任何问题。对欧拉的其余部分将非常有帮助!它也可以直接在范围内工作,因此您无需调用.to_a:

(1..20).inject(:+) - &gt; 210

http://ruby-doc.org/core-2.2.1/Enumerable.html

答案 2 :(得分:0)

对于标题问题,是否存在减少限制?

没有直接限制,它仅受阵列所需的计算机内存量的限制。正常整数溢出时会自动使用BigNum-class。

例如,

 (1..10000000).to_a.reduce(:+)
=> 50000005000000
50000005000000.class
=> Bignum

所以需要有另一个问题,或者是因为数字等运行时变得非常大,直到你的循环终止。