August 19, 2024

P35 - Determine the prime factors of a given positive integer.

Construct a flat list containing the prime factors in ascending order.

Example:* (prime-factors 315)(3 3 5 7)

lisp

(defun prime-factors (n)
  (if (< 0 n)
      (factors-above 1 n)
    ()
    )
  )

(defun factors-above (k n)
  (if (< n k)
      ()
    (let ((l (factors-equal-to (+ 1 k) n)))
      (append l (factors-above (1+ k) (/ n (apply '* l))))
      )
    )
  )

(defun factors-equal-to (k n)
  (if (= 0 (mod n k))
      (cons k (factors-equal-to k (/ n k)))
    ()
    )
  )
Be first to comment
Leave a reply