寻找红宝石中的最小倍数

时间:2017-01-15 19:18:56

标签: ruby

我最近开始学习ruby并试图解决一个问题,我必须找到可以被1到20的所有数字整除的最小数字(来自项目euler的问题5)我有以下代码,它始终保持不变正在运行,但我和它一样接近解决它,为什么它一直在运行的任何建议?提前谢谢

class SmallestMultiple
def findMultiple(limit)
    number = 1
    start = 1
    multiple = 0

    while start <= limit do
        if start == limit
            multiple = number
        elsif number % start == 0
            start +=1
        else
            start = 1
            number +=1
        end
    end       
    puts multiple     
end
end

integer = SmallestMultiple.new
puts integer.findMultiple(10)

2 个答案:

答案 0 :(得分:0)

对于我所看到的,你永远不会停止,因为当start和limit相等时,你没有添加任何东西来启动或退出循环:

if start == limit
  multiple = number
  start += 1 # Let's be sure we exist if we are done
elsif
  ...

答案 1 :(得分:0)

start等于limit时,此行会被执行:

multiple = number

但没有其他事情发生,因此start仍然等于limit

您需要breakstart += 1

对于limit = 20,您的脚本会返回232792560

另一种方法是将所有素数乘以低于20:

2*3*5*7*11*13*17*19

你得到9699690,但缺少一些因素。哪一个?

[4, 8, 9, 12, 16, 18, 20]

9699690乘以8 = 2*2*2*23应该涵盖所有内容:

9699690 * 8 * 3
232792560