Euler : Problem 34

Posted by TAKAIY On 2011年5月22日日曜日 0 コメント
それぞれの桁の数の階乗の和が元の数と同じになるような数についての問題。

全数アタックで30秒くらいかかってる。
数をリストで生成したけど、数として作って分解したほうが速かったかどうか?


;;
;; Problem 34 : 2011/5/18
;; "Elapsed time: 29005.216026 msecs"

;; (fact 0) ->
(def fact (memoize
(fn [n] (if (< n 2) 1
(* n (fact (dec n)))))))

(reduce +
(map (fn [n]
(let [x (reduce + (map fact (drop-while zero? n)))
y (list-to-num n)]
(cond (< x 3) 0
(= x y) x
:else 0)))
(for [a1 (range 10) a2 (range 10) a3 (range 10)
a4 (range 10) a5 (range 10) a6 (range 10)]
[a1 a2 a3 a4 a5 a6])))
;;

0 コメント:

コメントを投稿