Euler : Problem 46

Posted by YpsilonTAKAI On 2011年6月29日水曜日 0 コメント
奇数の合成数のうち、「素数と、何かの2乗の2倍の和」で表わされない最小の数を求める問題。

なんか、全然エレガントじゃないけど、素数じゃない奇数について、その数以下の素数を引いた残りが平方数になっているかどうか判定した。


;;
;; Problem 46 : 2011/6/13
;; "Elapsed time: 841.523433 msecs"

(defn square? [n]
(= (sqrt n) (int (sqrt n))))

(defn not-prime-plus-double-sq [n]
(every? false?
(map (fn [pnum]
(let [tstval (- n pnum)]
(and (even? tstval)
(square? (/ tstval 2 )))))
(prime-nums-under n))))

(take 1 (filter not-prime-plus-double-sq
(filter (complement is-prime?) (range 1 1000000 2))))
;;

0 コメント:

コメントを投稿