Euler : Problem 35

Posted by TAKAIY On 2011年5月22日日曜日 0 コメント
循環させても素数のままの素数の問題。

循環させた数のリストを作る関数を作った。0の扱いでひっかかったりして、結局文字列化して操作する方式になった。

あとは全数検査
途中に偶数とか5とかが入っていたら対象からはずすとかしたらちょっと速くなるかも。


;;
;; Problem 35 : 2011/5/19
;; "Elapsed time: 18328.781172 msecs"

(def *prime-list* (atom []))
(create-prime-list-under 1000000)

;;get all ratate num
(require '[clojure.contrib.string :as ccstr])

(defn rotate-num-str [num-str]
(str (ccstr/drop (dec (.length num-str)) num-str)
(ccstr/butlast 1 num-str) ))

(defn get-all-rotate-num [n]
(loop [new-num (rotate-num-str (str n))
res-list [n]]
(if (= new-num (str n))
res-list
(recur (rotate-num-str new-num)
(conj res-list (Integer/valueOf new-num))))))

(count
(map first
(filter #(every? true? (map is-prime? %))
(map get-all-rotate-num @*prime-list*))))
;;

0 コメント:

コメントを投稿