Advertisement
roman_gemini

Working With Simple Numbers

Jun 19th, 2015
268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; checks is factor are factor of number
  2. (defn is-factor? [factor number]
  3.   (= 0 (rem number factor)))
  4.  
  5. ; optimized function to find all factor of number
  6. (defn factors [number]
  7.   (def l (filter #(is-factor? % number)
  8.     (range 1 (inc (Math/floor (Math/sqrt number))))))
  9.   (concat l (reverse (map #(/ number %) l))))
  10.  
  11. ; get sum of all factors of number
  12. (defn sum-factors [number]
  13.   (apply + (factors number)))
  14.  
  15. ; is number simple?
  16. (defn is-simple? [number]
  17.   (= number (- (sum-factors number) 1)))
  18.  
  19. ; finds all simple numbers up to limit
  20. (defn simple [limit]
  21.   (filter is-simple? (range 1 (+ 1 limit))))
  22.  
  23. ; finds next simple number after number
  24. (defn next-simple [number]
  25.   (loop [start (inc number)]
  26.     (if (is-simple? start) start
  27.       (recur (inc start)))))
  28.  
  29. (def start (System/currentTimeMillis))
  30. (doseq [a (simple 10000000)] (println a))
  31. (println (- (System/currentTimeMillis) start))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement