August 19, 2024

P36 - Determine the prime factors of a given positive integer (2)

Construct a list containing the prime factors and their multiplicity.

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

Hint: The problem is similar to problem P10.

lisp

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

(defun factors-above2 (k n)
  (if (< n k)
      ()
    (let ((l (factors-equal-to2 (+ 1 k) n)))
      (if (= 0 (cadr l))
	  (factors-above2 (1+ k) (/ n (apply 'expt l))))
      (cons l (factors-above2 (1+ k) (/ n (apply 'expt l))))
      )
    )
  )

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