Factorization of Eratosthenes
Adapts the Sieve of Eratosthenes to prime factorize numbers through n
.
defn prime-factors [n]
(reduce
(fn [factors prime]
(if (= 1 (count (nth factors prime)))
(reduce
(fn [factors multiple]
(let [[composite-divisor :as divisors] (nth factors multiple)]
(if (< prime composite-divisor)
(let [remaining-divisor (/ composite-divisor prime)
(nth factors remaining-divisor)
remaining-divisors (cons prime (rest divisors))]
prime-divisors (assoc
(
factors multipleif (< 1 (count remaining-divisors))
(concat remaining-divisors prime-divisors)
(cons remaining-divisor prime-divisors))))
(
factors)))
factorsrange (* prime prime) (inc n) prime))
(
factors))mapv list (range (inc n)))
(range 2 (inc (m/sqrt n))))) (
13) (prime-factors
0)
[(1)
(2)
(3)
(2 2)
(5)
(3 2)
(7)
(2 2 2)
(3 3)
(5 2)
(11)
(3 2 2)
(13)] (