2520是可以被1到10之间的每一个数除而不留余数的最小数。
什么是最小的正数,它可以被1到20之间的所有数字平均整除?
我已经找到了一个解决方案,但这几乎是野蛮的强迫,运行大约7秒,直到它找到了解决方案。
我在stackoverflow上找到了答案,但无法理解找到答案背后的逻辑我知道什么是LCM和GCM,但他是如何用这种方法找到答案的呢(即232792560)

def find_multiple
  lcm = 1

  (2..20).each do |i|
    lcm *= i / gcd(lcm, i)
  end

  lcm
end

def gcd(a, b)
  while b > 0
    a %= b
    return b if a == 0
    b %= a
  end

  a
end

puts find_multiple

最佳答案

一种更短的方法,使用内置的lcm整数方法

p (2..20).inject(&:lcm)  # => 232792560

“lcm”是指“最小公倍数”(刷新内存:lcm在用不同分母加减分数时很有用)上面的代码是对以下过程进行编码的极其简洁的方法:
取2和3,计算LCM,即6。
用这个6,计算
下一个号码是4的lcm结果是12。
计算lcm
第12页和第5页。结果60
计算60和6的lcm结果60
等等,一直到20

10-08 04:20