Skip to content

Commit 054e533

Browse files
Merge pull request #1 from srcerer/patch-1
Create sieve_augmented.clj
2 parents cf54e4b + b838594 commit 054e533

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
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)

0 commit comments

Comments
 (0)