Euler : Problem 10

Posted by YpsilonTAKAI On 2011年4月11日月曜日 0 コメント
10番目に到達です。
そしてまた素数の問題です。

前に作ったやつを使ったら、あっさりとオーバーフローしたので、やっぱり作りなおし。
こんどはatomを使って作ったデータを保存してみた。
これならかなりでかいのでも大丈夫でしょう。

13秒かかりました。
遅いのか? 速いのか?

;;
;; Problem 10 : 2011/4/9
;; "Elapsed time: 13662.498447 msecs"
(def *prime-list* (atom []))

(defn is-prime? [target]
(loop [plist @*prime-list*]
(let [check-num (first plist)]
(cond (empty? plist) true
(> check-num (Math/sqrt target)) true
(zero? (rem target check-num)) false
true (recur (rest plist))))))

(defn create-prime-list-under [n]
(loop [target 2]
(if (>= target n)
true
(if (is-prime? target)
(do
(reset! *prime-list* (conj @*prime-list* target))
(recur (inc target)))
(recur (inc target))))))

(do
(reset! *prime-list* [])
(create-prime-list-under 2000000)
(reduce + @*prime-list*))


;;


0 コメント:

コメントを投稿