;; Simple function to calculate the prime factors of a (non-prime) integer n
;; /Mic
(defun primefac (n)
(if (not (numberp n))
(progn
(format t "~s is not a number!" n)
(return)))
(format t "The prime factors of ~a are: " n)
(tagbody loop_1
(if (= (/ n 2) (truncate (/ n 2)))
(progn
(format t "2 ")
(setf n (/ n 2))
(if (> n 1.0) (go loop_1)))))
(setf x 3)
(setf iters 0)
(tagbody loop_2
(setf iters (+ iters 1))
(if (= (/ n x) (truncate (/ n x)))
(progn
(format t "~a " x)
(setf n (/ n x)))
;; Increase x by 2 since all primes are odd, except 2 of course
(setf x (+ x 2)))
;; Give up after 500,000 iterations, or when the remaining factor is 1
(if (and (< iters 500000) (> n 1.0)) (go loop_2)))
)