Arantium Maestum

プログラミング、囲碁、読書の話題

Clojure入門 - Project Eulerを解いてみる 問5

第五問

最小公倍数を求めるだけ。

以下ネタバレ

(defn make-multiple [a b]
  (let [c (/ a b)]
    (if (integer? c)
      a
      (int (* a (denominator c))))))

(defn min-multiple [n]
  (reduce make-multiple 1 (range 1 (inc n))))

Clojureは割り算で余りが出る場合自動でrationalクラスに変換するので非常に楽。

reduceには第二引数をオプションで初期値にできる。今回実は初期値はいらないがあったほうが自然だと思う。