gpt4 book ai didi

ruby - 这个解决方案的数学逻辑是什么(找到一个数字是数字 1 到 20 的倍数)

转载 作者:太空宇宙 更新时间:2023-11-03 18:04:23 24 4
gpt4 key购买 nike

2520 是 1 到 10 中每一个数都可以整除而没有余数的最小数。

能被 1 到 20 的所有数字整除的最小正数是多少?

我已经找到了解决方案,但它几乎是暴力破解,大约需要 7 秒才能找到解决方案。

我在 stackoverflow 上找到了答案,但无法理解找到答案背后的逻辑。我知道 LCM 和 GCM 是什么,但他是如何想出以这种方式使用它们来找到答案的? (即 232,792,560)

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

最佳答案

更短的方法,使用 Integer 的内置 lcm 方法

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

“lcm”表示“最小公倍数”。 (复习一下:lcm 在加减不同分母的分数时很有用)。上面的代码是对以下过程进行编码的一种极其简洁的方式:

  • 取2和3,计算lcm,为6。
  • 用这 6,计算下一个数字 4 的 lcm。结果是 12。
  • 计算lcm12 和 5。结果 60
  • 计算60和6的lcm,结果60
  • 等一直到 20

关于ruby - 这个解决方案的数学逻辑是什么(找到一个数字是数字 1 到 20 的倍数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51802464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com