Guest User

project euler #3

a guest
Mar 8th, 2016
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 1.05 KB | None | 0 0
  1. (defvar *last-prime-factor* 2)
  2. (setf *last-prime-factor* 2)
  3.  
  4. (defun prime-range (x n)
  5.   (let ((n-sqrt (ceiling (sqrt n))))
  6.     (cond ((or  (> x n-sqrt)) t)
  7.           ((eq (rem n x) 0) nil)
  8.           (t (prime-range (incf x) n)))))
  9.  
  10. (defun prime-num-p (x)
  11.   (prime-range 2 x))
  12.  
  13. (defun int-p (x)
  14.   (= (- x (floor x)) 0))
  15.  
  16. (defun lpf-inner (x n n-sqrt)
  17.   (let* ((x-div (/ n x)))
  18.     (cond ((or (eq n-sqrt x)
  19.                (> x n-sqrt))
  20.            *last-prime-factor*)
  21.           ((and (eq (rem n x) 0)
  22.                 (prime-num-p x))
  23.            (setf *last-prime-factor* x)
  24.            (lpf-inner (incf x) n n-sqrt))
  25.           ((and (int-p x-div)
  26.                 (> x-div x)
  27.                 (eq (rem n x-div) 0)
  28.                 (prime-num-p x-div))
  29.            (setf *last-prime-factor* x-div)
  30.            (lpf-inner (incf x) n n-sqrt))
  31.           (t (lpf-inner (incf x) n n-sqrt)))))
  32.  
  33. (defun largest-prime-factor (n)  
  34.   (let* ((n-sqrt (ceiling (sqrt n))))
  35.     (lpf-inner 2 n n-sqrt)))
  36.  
  37. (format t "~F~%" (largest-prime-factor 600851475143 ))
Add Comment
Please, Sign In to add comment