Euler : Problem 9

Posted by TAKAIY On 2011年4月9日土曜日 0 コメント

三平方の定理の問題だぁ。

足して1000になる、小さい順になった数列全部を作って、後はしらみつぶし。

しらみつぶしが多いなぁ。
どうしたもんか。

;;
;; Problem 9 : 2011/4/8
;; a^2 + b^2 = c^2
;; a + b + c = 1000

(use 'clojure.contrib.math)

(defn third+1 [n]
(if (zero? (rem n 3))
(inc (/ n 3))
(inc (int (/ n 3)))))

(defn half+1 [n]
(if (zero? (rem n 2))
(inc (/ n 2))
(inc (int (/ n 2)))))

(let [max-num 1000]
(filter #(not (= % nil))
(for [a (range 1 (third+1 max-num))
b (range (inc a) (half+1 (- max-num a)))]
(let [c (- max-num (+ a b))]
(if (= (+ (expt a 2) (expt b 2))
(expt c 2))
(list (* a b c) [a b c]))))))

;;

0 コメント:

コメントを投稿