Ruby解决方案解释为“最小正数除以”

时间:2016-06-21 02:25:06

标签: ruby

我正在逐条解释这个解决方案的工作原理。它找到了最小的正数,可以将所有数字从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。

1 个答案:

答案 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}"