  EULER # 023
;; ==========
;; A perfect number is a number for which the sum of its proper divisors is
;; exactly equal to the number. For example, the sum of the proper divisors
  of 28 would be 1 + 2 + 4 + 7 + 14 = 28 , which means that 28 is a perfect
;; number.
;;
;; A number n is called deficient if the sum of its proper divisors is less
;; than n and it is called abundant if this sum exceeds n.
;;
  As 12 is the smallest abundant number , 1 + 2 + 3 + 4 + 6 = 16 , the smallest
  number that can be written as the sum of two abundant numbers is 24 . By
  mathematical analysis , it can be shown that all integers greater than 28123
  can be written as the sum of two abundant numbers . However , this upper limit
;; cannot be reduced any further by analysis even though it is known that the
  greatest number that can not be expressed as the sum of two abundant numbers
;; is less than this limit.
;;
;; Find the sum of all the positive integers which cannot be written as the sum
  of two abundant numbers .
;;
 
(ns euler023
  (:use [util.misc]))
 
(def is-abundant?
  (memoize
    (fn [n]
      (let [sum (reduce + (divisors n))]
        (> sum n)))))
 
(defn abundant-range
  ([] (abundant-range 0 Double/POSITIVE_INFINITY))
  ([end] (abundant-range 0 end))
  ([start end]
   (filter is-abundant? (range (max start 12) end))))
 
(defn sum-of-abundants? [i abundant-set]
  (some #(abundant-set (- i %)) (take-while #(< % i) abundant-set)))
 
(defn solve [n]
  (let [limit (inc n)
        abundant-set (into (sorted-set) (abundant-range limit))]
    (reduce + (for [i (range limit)
                    :when (not (sum-of-abundants? i abundant-set))]
                i))))
 
(time (solve 28123))

 ==========
 A perfect number is a number for which the sum of its proper divisors is
 exactly equal to the number. For example, the sum of the proper divisors
 number.

 A number n is called deficient if the sum of its proper divisors is less
 than n and it is called abundant if this sum exceeds n.

 cannot be reduced any further by analysis even though it is known that the
 is less than this limit.

 Find the sum of all the positive integers which cannot be written as the sum

  EULER # 023
  of 28 would be 1 + 2 + 4 + 7 + 14 = 28 , which means that 28 is a perfect
  As 12 is the smallest abundant number , 1 + 2 + 3 + 4 + 6 = 16 , the smallest
  number that can be written as the sum of two abundant numbers is 24 . By
  mathematical analysis , it can be shown that all integers greater than 28123
  can be written as the sum of two abundant numbers . However , this upper limit
  greatest number that can not be expressed as the sum of two abundant numbers
  of two abundant numbers .
 
(ns euler023
  (:use [util.misc]))
 
(def is-abundant?
  (memoize
    (fn [n]
      (let [sum (reduce + (divisors n))]
        (> sum n)))))
 
(defn abundant-range
  ([] (abundant-range 0 Double/POSITIVE_INFINITY))
  ([end] (abundant-range 0 end))
  ([start end]
   (filter is-abundant? (range (max start 12) end))))
 
(defn sum-of-abundants? [i abundant-set]
  (some #(abundant-set (- i %)) (take-while #(< % i) abundant-set)))
 
(defn solve [n]
  (let [limit (inc n)
        abundant-set (into (sorted-set) (abundant-range limit))]
    (reduce + (for [i (range limit)
                    :when (not (sum-of-abundants? i abundant-set))]
                i))))
 
(time (solve 28123))
