2012年5月2日水曜日

Project Euler-Problem5をgroovyで解いてみる

問題

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

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

問題を解いたプログラム

最小公倍数を求めていって、結果をだしいます。
流れとしては、下のような感じになっています。
1と2→2
2と3→6
6と3→6
6と4→12
〜省略〜
12252240と19→232792560
232792560と20→232792560

private int lcm(int n1, int n2) {
  def ret = n1
  while (ret % n2 != 0) {
    ret += n1
  }
  return ret
}
def ret = (1 .. 20).inject(1) {n1, n2 -> lcm(n1, n2) }
println "ret = $ret"