27 lines
727 B
Clojure
27 lines
727 B
Clojure
(defn divisible? [a b]
|
|
(zero? (mod a b)))
|
|
|
|
(defn prime? [n]
|
|
(and (> n 1) (not-any? (partial divisible? n) (range 2 n))))
|
|
|
|
(defn prime-factors
|
|
([n] (prime-factors n 2 '()))
|
|
([n candidate acc]
|
|
(cond
|
|
(<= n 1) (reverse acc)
|
|
(zero? (rem n candidate)) (recur
|
|
(/ n candidate)
|
|
candidate
|
|
(cons candidate acc))
|
|
:else (recur n (inc candidate) acc))))
|
|
|
|
(defn sum-digits [n]
|
|
(reduce + (map #(- (int %) (int \0)) (str n))))
|
|
|
|
(defn smith-number? [n]
|
|
(and (not (prime? n))
|
|
(= (sum-digits n)
|
|
(sum-digits (clojure.string/join "" (prime-factors n))))))
|
|
|
|
(filter smith-number? (range 1 10000))
|