# euler / clojure / 12.clj

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45``` ```; The sequence of triangle numbers is generated by adding the natural numbers. ; So the 7^(th) triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The ; first ten terms would be: ; ; 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... ; ; Let us list the factors of the first seven triangle numbers: ; ; 1: 1 ; 3: 1,3 ; 6: 1,2,3,6 ; 10: 1,2,5,10 ; 15: 1,3,5,15 ; 21: 1,3,7,21 ; 28: 1,2,4,7,14,28 ; ; We can see that 28 is the first triangle number to have over five divisors. ; ; What is the value of the first triangle number to have over five hundred ; divisors? ; ; Answer: 76576500 (defn num-factors [n] (let [max (inc (int (Math/sqrt n)))] (loop [fs [] i 1] (if (= i max) (count (set fs)) ; Unique items (if (zero? (mod n i)) (recur (concat fs [i (/ n i)]) (inc i)) (recur fs (inc i))))))) (defn traignles-step [it] (let [i (first it) t (last it)] [(inc i) (+ i t)])) (defn triangles [] (map last (rest (iterate traignles-step [1 0])))) (defn find-n [n] (let [fseq (pmap (fn [i] [i (num-factors i)]) (triangles))] (ffirst (filter (fn [fs] (> (last fs) n)) fseq)))) (prn (find-n 500)) (shutdown-agents) ; So we'll exit nicely ```