RosettaCodeData/Task/Prime-decomposition/Common-Lisp/prime-decomposition-1.lisp

9 lines
300 B
Common Lisp
Raw Permalink Normal View History

2013-04-10 23:57:08 -07:00
;;; Recursive algorithm
(defun factor (n)
"Return a list of factors of N."
(when (> n 1)
(loop with max-d = (isqrt n)
for d = 2 then (if (evenp d) (+ d 1) (+ d 2)) do
(cond ((> d max-d) (return (list n))) ; n is prime
((zerop (rem n d)) (return (cons d (factor (truncate n d)))))))))