とんちゃんといっしょ

Cloudに関する技術とか日常とかについて書いたり書かなかったり

Problem 5

問題

What is the smallest number divisible by each of the numbers 1 to 20?

英語

2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.

What is the smallest number that is evenly divisible by all of the numbers from 1 to 20?

http://projecteuler.net/index.php?section=problems&id=5
日本語

2520 は 1 から 10 の数字の全ての整数で割り切れる数字であり、そのような数字の中では最小の値である。

では、1 から 20 までの整数全てで割り切れる数字の中で最小の値はいくらになるか。

http://odz.sakura.ne.jp/projecteuler/index.php?Problem%205

解説

1〜20のLCMを求める問題。
ユークリッドの互助法でGCDを求めてLCMを求める。
GCDはmathnのInteger#gcd2があるのでそれを利用。

ソースコード(Ruby)

require 'mathn'

def lcm(a, b)
    (a * b) / a.gcd2(b)
end            

p (3..20).inject(lcm(1, 2)){|s,i|lcm(s, i)}