我知道,在Ruby中,您可以使用Integer#lcm
方法获得两个数字中最不常见的倍数。例如:
10.lcm(15)
# => 30
是否有一种有效的(或内核到核心或stdlib)方式来获得给定数组中所有整数的最小公倍数?例如:
[5, 3, 10, 2, 20].lcm
# => 60
答案 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,因为您在运行时扩展了一个类。不过,有些人对此并不满意。)