Skip to content

Instantly share code, notes, and snippets.

@rinfz
Created July 29, 2022 00:37
Show Gist options
  • Save rinfz/7bbaccfe39b1eaf3a9d7aaeb965f8436 to your computer and use it in GitHub Desktop.
Save rinfz/7bbaccfe39b1eaf3a9d7aaeb965f8436 to your computer and use it in GitHub Desktop.
(defn <sqrt [n]
(range 3 (+ (int (Math/sqrt n)) 1)))
(defn prime-inner
[n]
(nil? (some #(= (mod n %) 0) (<sqrt n))))
(defn is-prime? [n]
(cond
(< n 2) false
(= n 2) true
(= n 3) true
(= (mod n 2) 0) false
:else (prime-inner n)))
(defn next-prime [n]
(first (drop-while #(not (is-prime? %)) (iterate inc (inc n)))))
(defn factors-impl [n curr xs]
(cond
(= n 1) xs
(= (mod n curr) 0)
(cons curr (factors-impl (/ n curr) curr xs))
:else
(factors-impl n (next-prime curr) xs)))
(defn factors [n]
(distinct (factors-impl n 2 [])))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment