Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jneira/948682 to your computer and use it in GitHub Desktop.
Save jneira/948682 to your computer and use it in GitHub Desktop.
;; 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