File tree Expand file tree Collapse file tree 1 file changed +31
-0
lines changed
notebooks/math/primes/factorization Expand file tree Collapse file tree 1 file changed +31
-0
lines changed Original file line number Diff line number Diff line change 1+ (ns math.primes.factorization.sieve-augmented
2+ (:require [clojure.math :as m]))
3+
4+ ; ; Adapts the
5+ ; ; [Seive of Eratosthenes](https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes)
6+ ; ; to prime factorize numbers through `n`.
7+
8+ (defn prime-factors [n]
9+ (reduce
10+ (fn [factors prime]
11+ (if (= 1 (count (nth factors prime)))
12+ (reduce
13+ (fn [factors multiple]
14+ (let [[composite-divisor :as divisors] (nth factors multiple)]
15+ (if (< prime composite-divisor)
16+ (let [remaining-divisor (/ composite-divisor prime)
17+ remaining-divisors (nth factors remaining-divisor)
18+ prime-divisors (cons prime (rest divisors))]
19+ (assoc
20+ factors multiple
21+ (if (< 1 (count remaining-divisors))
22+ (concat remaining-divisors prime-divisors)
23+ (cons remaining-divisor prime-divisors))))
24+ factors)))
25+ factors
26+ (range (* prime prime) (inc n) prime))
27+ factors))
28+ (mapv list (range (inc n)))
29+ (range 2 (inc (m/sqrt n)))))
30+
31+ (prime-factors 10 )
You can’t perform that action at this time.
0 commit comments