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

在Ruby中获取整数数组的最小公倍数,ruby,Ruby,我知道,在Ruby中,可以使用该方法获得两个数字的最小公倍数。例如: 10.lcm(15) # => 30 [5, 3, 10, 2, 20].lcm # => 60 是否有一种有效的(或内置于核心或stdlib)方法来获取给定数组中所有整数的最小公倍数?例如: 10.lcm(15) # => 30 [5, 3, 10, 2, 20].lcm # => 60 任何使用两个操作数的操作都可以通过它对集合进行迭代应用:。要覆盖空的大小写,请传递操作的第一个参数,即最小

我知道,在Ruby中,可以使用该方法获得两个数字的最小公倍数。例如:

10.lcm(15)
# => 30
[5, 3, 10, 2, 20].lcm
# => 60
是否有一种有效的(或内置于核心或stdlib)方法来获取给定数组中所有整数的最小公倍数?例如:

10.lcm(15)
# => 30
[5, 3, 10, 2, 20].lcm
# => 60

任何使用两个操作数的操作都可以通过它对集合进行迭代应用:。要覆盖空的大小写,请传递操作的第一个参数,即最小公分母的
1

[5, 3, 10, 2, 20].reduce(1) { |acc, n| acc.lcm(n) } # => 60
也可以写为:

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

除了tokland的答案之外,如果您确实希望
#lcm
方法作用于整数数组,您可以向数组类添加实例方法

类数组
def lcm
自还原(1,:lcm)
结束
结束
放置10.lcm(15)
# => 30
puts[5,3,10,2,20].lcm
# => 60

(当您在运行时扩展类时,这种做法被称为。不过有些人并不赞成这种做法。)

谢谢!我只想到使用reduce作为基本算法;我需要在更复杂的情况下记住它!如果我想用除reduce或reduce之外的逻辑来计算它呢inject@JacksonJegatheesan,而不是提供一个方法符号来减少,你也可以提供一个你可以自己做逻辑的块<代码>[5,3,10,2,20].reduce(1){| memo,element | memo.lcm(element)}相同。然后,您还可以在块中执行其他操作,例如非感官的
[5,3,10,2,20].reduce(1){memo,element{memo=rand(memo)+element}
memo
充当从块调用传递到下一个块调用的值。@JochemSchulenklopper:对于一个新加入Ruby的程序员来说,这是一个很好的观点,我将把它添加到答案中。您好,来自Code2020的出现?:-)是:-D我正在查找LCM讨论,并将此答案添加到问题中。