Skip to main content
Fixed some grammar; improved formatting in explanation; added 'primes' tag
Source Link

Clojure code searching for finding prime numbers

This is my Clojure code for searchingfinding prime numbers. 

Note it's: this is an advanced version which starts eliminating from i*i with step i, instead of filtering all list against mod i == 0 (see http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes(Sieve of Eratosthenes)). 

It has better asymptotic run time -runtime: O(n log log n) instead of O(n log n) in typical examples on how to searchof finding primes in Clojure.

What can be done better? Do I use some slow constructions? Can I make it more concise? Gain more performance? Format it better?

(defn primes [n]
  (let [mark (fn [i di v]
               (if (<= i (count v))
                 (recur (+ i di) di (assoc v (dec i) di))
                 v))
        step (fn [i ps v]
               (if (<= i (count v))
                 (if (= (v (dec i)) 1)
                   (recur (inc i) (conj ps i) (mark (* i i) i v))
                   (recur (inc i) ps v))
                 ps))]
(->> (repeat 1) (take n) vec (step 2 []))))

(defn -main
  [& args]
  (println (primes 50)))

Clojure code searching for prime numbers

This is my Clojure code for searching prime numbers. Note it's advanced version which starts eliminating from i*i with step i, instead of filtering all list against mod i == 0 (see http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes). It has better asymptotic run time - O(n log log n) instead O(n log n) in typical examples on how to search primes in Clojure.

What can be done better? Do I use some slow constructions? Can I make it more concise? Gain more performance? Format it better?

(defn primes [n]
  (let [mark (fn [i di v]
               (if (<= i (count v))
                 (recur (+ i di) di (assoc v (dec i) di))
                 v))
        step (fn [i ps v]
               (if (<= i (count v))
                 (if (= (v (dec i)) 1)
                   (recur (inc i) (conj ps i) (mark (* i i) i v))
                   (recur (inc i) ps v))
                 ps))]
(->> (repeat 1) (take n) vec (step 2 []))))

(defn -main
  [& args]
  (println (primes 50)))

Clojure code for finding prime numbers

This is my Clojure code for finding prime numbers. 

Note: this is an advanced version which starts eliminating from i*i with step i, instead of filtering all list against mod i == 0 (Sieve of Eratosthenes). 

It has better asymptotic runtime: O(n log log n) instead of O(n log n) in typical examples of finding primes in Clojure.

What can be done better? Do I use some slow constructions? Can I make it more concise? Gain more performance? Format it better?

(defn primes [n]
  (let [mark (fn [i di v]
               (if (<= i (count v))
                 (recur (+ i di) di (assoc v (dec i) di))
                 v))
        step (fn [i ps v]
               (if (<= i (count v))
                 (if (= (v (dec i)) 1)
                   (recur (inc i) (conj ps i) (mark (* i i) i v))
                   (recur (inc i) ps v))
                 ps))]
(->> (repeat 1) (take n) vec (step 2 []))))

(defn -main
  [& args]
  (println (primes 50)))
added 115 characters in body
Source Link
demi
  • 211
  • 1
  • 8

This is my Clojure code for searching prime numbers. Note it's advanced version which starts eliminating from i*i with step i, instead of filtering all list against mod i == 0 (see http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes). It has better asymptotic run time - O(n log log n) instead O(n log n) in typical examples on how to search primes in Clojure. 

What can be done better? Do I use some slow constructions? Can I make it more concise? Gain more performance? Format it better?

(defn primes [n]
  (let [mark (fn [i di v]
               (if (<= i (count v))
                 (recur (+ i di) di (assoc v (dec i) di))
                 v))
        step (fn [i ps v]
               (if (<= i (count v))
                 (if (= (v (dec i)) 1)
                   (recur (inc i) (conj ps i) (mark (* i i) i v))
                   (recur (inc i) ps v))
                 ps))]
(->> (repeat 1) (take n) vec (step 2 []))))

(defn -main
  [& args]
  (println (primes 50)))

This is my Clojure code for searching prime numbers. Note it's advanced version which starts eliminating from i*i with step i, instead of filtering all list against mod i == 0. It has better asymptotic run time - O(n log log n) instead O(n log n). What can be done better? Do I use some slow constructions? Can I make it more concise? Gain more performance? Format it better?

(defn primes [n]
  (let [mark (fn [i di v]
               (if (<= i (count v))
                 (recur (+ i di) di (assoc v (dec i) di))
                 v))
        step (fn [i ps v]
               (if (<= i (count v))
                 (if (= (v (dec i)) 1)
                   (recur (inc i) (conj ps i) (mark (* i i) i v))
                   (recur (inc i) ps v))
                 ps))]
(->> (repeat 1) (take n) vec (step 2 []))))

(defn -main
  [& args]
  (println (primes 50)))

This is my Clojure code for searching prime numbers. Note it's advanced version which starts eliminating from i*i with step i, instead of filtering all list against mod i == 0 (see http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes). It has better asymptotic run time - O(n log log n) instead O(n log n) in typical examples on how to search primes in Clojure. 

What can be done better? Do I use some slow constructions? Can I make it more concise? Gain more performance? Format it better?

(defn primes [n]
  (let [mark (fn [i di v]
               (if (<= i (count v))
                 (recur (+ i di) di (assoc v (dec i) di))
                 v))
        step (fn [i ps v]
               (if (<= i (count v))
                 (if (= (v (dec i)) 1)
                   (recur (inc i) (conj ps i) (mark (* i i) i v))
                   (recur (inc i) ps v))
                 ps))]
(->> (repeat 1) (take n) vec (step 2 []))))

(defn -main
  [& args]
  (println (primes 50)))
Source Link
demi
  • 211
  • 1
  • 8

Clojure code searching for prime numbers

This is my Clojure code for searching prime numbers. Note it's advanced version which starts eliminating from i*i with step i, instead of filtering all list against mod i == 0. It has better asymptotic run time - O(n log log n) instead O(n log n). What can be done better? Do I use some slow constructions? Can I make it more concise? Gain more performance? Format it better?

(defn primes [n]
  (let [mark (fn [i di v]
               (if (<= i (count v))
                 (recur (+ i di) di (assoc v (dec i) di))
                 v))
        step (fn [i ps v]
               (if (<= i (count v))
                 (if (= (v (dec i)) 1)
                   (recur (inc i) (conj ps i) (mark (* i i) i v))
                   (recur (inc i) ps v))
                 ps))]
(->> (repeat 1) (take n) vec (step 2 []))))

(defn -main
  [& args]
  (println (primes 50)))