获取Ruby中整数数组的最小公倍数

时间:2012-05-28 11:00:18

标签: ruby

我知道,在Ruby中,您可以使用Integer#lcm方法获得两个数字中最不常见的倍数。例如:

10.lcm(15)
# => 30

是否有一种有效的(或内核到核心或stdlib)方式来获得给定数组中所有整数的最小公倍数?例如:

[5, 3, 10, 2, 20].lcm
# => 60

2 个答案:

答案 0 :(得分:29)

任何带有两个操作数的操作都可以通过folding迭代地应用于集合。这是Ruby中的Enumerable#inject/reduce。为了覆盖空案例,您将第一个参数作为操作的identity element传递(在这种情况下为1)。

>> [5, 3, 10, 2, 20].reduce(1, :lcm)
=> 60 

答案 1 :(得分:1)

除了tokland的答案外,如果您真的希望close(2)方法作用于整数数组,则可以向Array类添加实例方法。

#lcm

(这种做法称为Monkey patching,因为您在运行时扩展了一个类。不过,有些人对此并不满意。)