三平方の定理の問題だぁ。
足して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 コメント:
コメントを投稿