Advertisement
Guest User

Untitled

a guest
Mar 9th, 2016
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 0.97 KB | None | 0 0
  1. (defun prime-range (x n)
  2.   (let ((n-sqrt (ceiling (sqrt n))))
  3.     (cond ((> x n-sqrt) t)
  4.           ((zerop (rem n x)) nil)
  5.           (t (prime-range (+ x 1) n)))))
  6.  
  7. (defun prime-num-p (x)
  8.   (prime-range 2 x))
  9.  
  10. (defun int-p (x)
  11.   (= (- x (floor x)) 0))
  12.  
  13. (defun lpf-inner (x n n-sqrt)
  14.   (let* ((x-div (/ n x)))
  15.     (cond ((= 1 x) 1) ; no prime factor available
  16.           ((and (zerop (rem n x))
  17.                 (prime-num-p x))
  18.            x) ; x is the first and largest prime factor
  19.           ((and (int-p x-div)
  20.                 (prime-num-p x-div))
  21.            x-div) ; x-div is the first and largest prime factor
  22.           (t (lpf-inner (- x 2) n n-sqrt)))))
  23.  
  24. (defun largest-prime-factor (n)  
  25.   (let* ((n-sqrt (ceiling (sqrt n))))
  26.     (if (zerop (rem n-sqrt 2))
  27.         (+ n-sqrt 1))
  28.     (lpf-inner n-sqrt n n-sqrt)))
  29.  
  30. ;; Some large value test cases, with timing provided
  31. ;(time (largest-prime-factor 9007199254740993))
  32. ;(time (largest-prime-factor 600851475143))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement