-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path010.clj
25 lines (21 loc) · 800 Bytes
/
010.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
; Find the sum of all the primes below two million.
(defn lazy-primes []
(letfn [(enqueue [sieve n step]
(let [m (+ n step)]
(if (sieve m)
(recur sieve m step)
(assoc sieve m step))))
(next-sieve [sieve n]
(if-let [step (sieve n)]
(-> sieve
(dissoc n)
(enqueue n step))
(enqueue sieve n (+ n n))))
(next-primes [sieve n]
(if (sieve n)
(recur (next-sieve sieve n) (+ n 2))
(cons n (lazy-seq (next-primes (next-sieve sieve n) (+ n 2))))))]
(cons 2 (lazy-seq (next-primes {} 3)))))
(defn euler010 []
(reduce + (take-while #(< % 2000000) (lazy-primes))))
(time (println (euler010)))