Skip to content

Instantly share code, notes, and snippets.

@28
Last active November 8, 2016 10:03
Show Gist options
  • Select an option

  • Save 28/03aaaa067a9b5db139d0759faab1b111 to your computer and use it in GitHub Desktop.

Select an option

Save 28/03aaaa067a9b5db139d0759faab1b111 to your computer and use it in GitHub Desktop.
A collection of all things for prime numbers that are fun...
(def is-prime?
(memoize
(fn [^Number num]
^Boolean
(cond
(<= num 1) false
(<= num 3) true
(or (zero? (mod num 2)) (zero? (mod num 3))) false
:else (reduce #(if (<= (* %2 %2) num)
(reduced true)
(if (or (zero? (mod num %2)) (zero? (mod num (+ %2 2))))
(reduced false) %))
true
(range 1 (inc num)))))))
(def sieve-of-eratosthenes
(memoize (fn [^Number num] (when (> num 1)
(loop [v (into [] (map not (boolean-array num)))
i 2]
(if (<= i (Math/sqrt num))
(if (true? (get v i))
(recur (loop [vv v
j (* i i)]
(if (<= j num)
(recur (assoc vv j false) (+ j i))
vv))
(inc i))
(recur v (inc i)))
(remove nil?
(map-indexed
(fn [ind value] (when (and (> ind 1) (true? value)) ind)) v))))))))
(defn sieve-of-eratosthenes-revisited
[n]
(let [erathostenes (transient (vec (replicate n true)))]
(doseq [i (range 2 (Math/sqrt n))
:let [b (nth erathostenes i)]]
(if b
(loop [j (* i i) k 1]
(if (< j n)
(do
(assoc! erathostenes j false)
(recur (+ (* i i) (* k i)) (inc k)))))))
(filter some? (map-indexed #(if %2 % nil) (drop 2 (persistent! erathostenes))))))
(def sieve-of-sundaram
(memoize (fn [^Number n]
(let [top (inc n)]
(map (comp inc (partial * 2))
(sort
(clojure.set/difference (set (range 1 top))
(set (for [i (range 1 top) j (range i top)
:let [x (+ i j (* 2 i j))]
:while (<= x top)]
x)))))))))
;; TODO - Optimize...
@rssole
Copy link

rssole commented Oct 28, 2016

(def is-prime?
(memoize
(fn [^Number num] ^Boolean
(cond
(<= num 1) false
(<= num 3) true
(or (zero? (mod num 2)) (zero? (mod num 3))) false
:else (reduce #(if (<= (* %2 %2) num)
(reduced true)
(if (or (zero? (mod num %2)) (zero? (mod num (+ %2 2))))
(reduced false) %))
true
(range 1 (inc num)))))))

@28
Copy link
Author

28 commented Oct 30, 2016

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment