Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defvar *last-prime-factor* 2)
- (setf *last-prime-factor* 2)
- (defun prime-range (x n)
- (let ((n-sqrt (ceiling (sqrt n))))
- (cond ((or (> x n-sqrt)) t)
- ((eq (rem n x) 0) nil)
- (t (prime-range (incf x) n)))))
- (defun prime-num-p (x)
- (prime-range 2 x))
- (defun int-p (x)
- (= (- x (floor x)) 0))
- (defun lpf-inner (x n n-sqrt)
- (let* ((x-div (/ n x)))
- (cond ((or (eq n-sqrt x)
- (> x n-sqrt))
- *last-prime-factor*)
- ((and (eq (rem n x) 0)
- (prime-num-p x))
- (setf *last-prime-factor* x)
- (lpf-inner (incf x) n n-sqrt))
- ((and (int-p x-div)
- (> x-div x)
- (eq (rem n x-div) 0)
- (prime-num-p x-div))
- (setf *last-prime-factor* x-div)
- (lpf-inner (incf x) n n-sqrt))
- (t (lpf-inner (incf x) n n-sqrt)))))
- (defun largest-prime-factor (n)
- (let* ((n-sqrt (ceiling (sqrt n))))
- (lpf-inner 2 n n-sqrt)))
- (format t "~F~%" (largest-prime-factor 600851475143 ))
Add Comment
Please, Sign In to add comment