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