我正在逐条解释这个解决方案的工作原理。它找到了最小的正数,可以将所有数字从1到20分开而没有任何余数。
test = 20
divisor = 0
while true
# Don't check factors from 1-10, since all included in 11-20. Plus check backwards from 20 down, to save time.
20.downto(11) do |d|
divisor = d
# puts "test = #{test}, d = #{d}"
break if test % d != 0
end
if divisor == 11 && test % divisor == 0
puts "Answer = #{test}"
exit
end
test += 20 # only need to check multiples of 20
end
具体来说,我不确定代码中的数字乘以哪个,产生232,792,560。
答案 0 :(得分:1)
不知道你被困在哪里。这是一个简单的方法来计算lcm的1-20,但运行速度非常慢。
此脚本有两个循环,外部循环每次加上测试编号20。这很明显,因为结果必须是20的倍数。然后我们有test += 20
。
对于每个测试编号,我们需要将其除以20到11之间的每个数字。(实际上只需要19到11个。)无需测试1到10.我们将这些因素包括在11-20中。例如,如果num可以除以12,则可以将其除以2和3。
在内部循环结束或break
条件为真之后,我们检查是否每个因素都经过测试,以确保内部循环不被中断。如果是这样,我们找到答案。结果将打印在以下行:puts "Answer = #{test}"
。