So, here is the problem:

2520 is the smallest number that can be divided by each of the numbersFor this problem, I actually solved it in a really ugly, awful way and then went back to refactor . I can't remember exactly but I think the ugly way involved taking a range of numbers, multiplying all of them and then seeing which was the smallest that had a remainder of 0 for each of the numbers... whatever it was, it was super complicated. Anyway, so first, the tests:

from 1 to 10 without any remainder.

What is the smallest positive number that is evenly divisible by

all of the numbers from 1 to 20?

require 'problem5/problem5'

describe 'lowest common multiple' do

it "find the smallest number that can be divided by 1 through 10 with no remainder" do

expect(Problem5.divided_by(1...10)).to eq 2520

end

it "finds the smallest number that can be divided by 1 through 20 with no remainder" do

expect(Problem5.divided_by(1...20)).to eq 232792560

end

end

At this point, if you've been reading the Euler series of this blog, you'll notice a pattern to all of the tests. This may not be the most sophisticated way to execute the tests since rspec can do a lot of cool things, but using the same format worked for and was a way I became comfortable with seeing tests formats, running the tests, etc.

Now for the answer:

module Problem5

def self.divided_by(number_range)

list = (number_range).inject(:lcm)

return list

end

puts Problem5.divided_by(1..20)

end

so, once I started reading the ruby docs, I noticed there was a greatest common denominator and a least common multiple method with an integer. Looking into those, the least common multiple method was a perfect, simple way to solve this problem. The inject plus LCM method on an integer basically takes a list and finds the lowest common multiple of that range of numbers. comments powered by Disqus