array.reduce(:lcm) 在Ruby 中是什么意思?

What does array.reduce(:lcm) mean in Ruby?

我目前正在研究 Project Euler 的第五个问题,它让您找到可以被 1 到 20 之间的每个数字均分的最小倍数。我的解决方案有效,但它花了相当长的时间,所以我正在寻找网上其他解决方案。我找到了这段代码:

these = []
1.upto(20) {|i| these << i} # Easier than writing it out

puts "Answer: #{these.reduce(:lcm)}"

这段代码非常简洁,而且可以立即运行,而我的代码需要两分钟多才能找到答案。我的问题是 :1cm 是什么意思?我知道你可以通过 :+ 和其他类似的选项来减少它们,它们会将数组的元素加在一起或相乘,但我以前从未见过“1cm”,我的 google fu 使我失望。

lcmInteger 的一种方法 - 检查文档 here

Returns the least common multiple (always positive). 0.lcm(x) and x.lcm(0) return zero.

2.lcm(2)                    #=> 2
3.lcm(-7)                   #=> 21
((1<<31)-1).lcm((1<<61)-1)  #=> 4951760154835678088235319297

您也可以将此方法直接应用于数组,它会给出所有元素的 lcm。

[1,2,3,4].reduce(:lcm)  # => 12 
[*1..20].reduce(:lcm) # => 232792560