-
-
Save jneira/948682 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; jneira's solution to http://4clojure.com/problem/67 | |
(defn primes [n] | |
(let | |
[next-prime | |
(fn [prs] | |
(letfn | |
[(aux [[f & r :as c] nxt] | |
(cond | |
(empty? c) (conj prs nxt) | |
(zero? (mod nxt f)) (recur prs (inc nxt)) | |
:else (recur (take-while #(< % (quot nxt f)) r) | |
nxt)))] | |
(aux prs (inc (last prs)))))] | |
(->> (iterate next-prime [2]) | |
(take n) | |
(last)))) | |
four-clojure> (doseq [i (take 10 (iterate #(* 2 %) 2))] | |
(time (dorun (primes3 i)))) | |
"Elapsed time: 3.657657 msecs" | |
"Elapsed time: 0.235296 msecs" | |
"Elapsed time: 0.608317 msecs" | |
"Elapsed time: 2.046 msecs" | |
"Elapsed time: 71.857247 msecs" | |
"Elapsed time: 22.308631 msecs" | |
"Elapsed time: 21.346638 msecs" | |
"Elapsed time: 34.725852 msecs" | |
"Elapsed time: 102.604032 msecs" | |
"Elapsed time: 341.840932 msecs" | |
nil | |
;; comparation with filter solution | |
(defn primes4 [n] | |
(let [prime? | |
(fn [x] (every? #(not= 0 (mod x %)) (range 2 x)))] | |
(take n (filter prime? | |
(drop 2 (range)))))) | |
four-clojure> (doseq [i (take 10 (iterate #(* 2 %) 2))] | |
(time (dorun (primes4 i)))) | |
"Elapsed time: 1.733042 msecs" | |
"Elapsed time: 0.7084 msecs" | |
"Elapsed time: 0.704 msecs" | |
"Elapsed time: 2.185822 msecs" | |
"Elapsed time: 92.96859 msecs" | |
"Elapsed time: 18.939349 msecs" | |
"Elapsed time: 65.61225 msecs" | |
"Elapsed time: 266.519977 msecs" | |
"Elapsed time: 1159.456579 msecs" | |
"Elapsed time: 5412.307849 msecs" | |
nil |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment