我正在尝试解决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
答案 0 :(得分:0)
事实证明你可以用Integer#lcm来解决这个问题。是的。在一行也是。
(1..20).to_a.reduce(:lcm)
答案 1 :(得分:0)
我用 array.inject(:+) 并且永远不会遇到阵列长度的任何问题。对欧拉的其余部分将非常有帮助!它也可以直接在范围内工作,因此您无需调用.to_a:
(1..20).inject(:+) - &gt; 210
答案 2 :(得分:0)
对于标题问题,是否存在减少限制?
没有直接限制,它仅受阵列所需的计算机内存量的限制。正常整数溢出时会自动使用BigNum-class。
例如,
(1..10000000).to_a.reduce(:+)
=> 50000005000000
50000005000000.class
=> Bignum
所以需要有另一个问题,或者是因为数字等运行时变得非常大,直到你的循环终止。