aboutsummaryrefslogtreecommitdiff
path: root/lisp/003-largest_prime_factor.lisp
blob: e2fbe7a33a4a73e7c97d414e6abc3fa053c63bce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
;;;; ;;;;;;;;
;;;; Largest prime factor
;;;; Problem 3
;;;;
;;;; The prime factors of 13195 are 5, 7, 13 and 29.
;;;; What is the largest prime factor of the number 600851475143 ?
;;;; ;;;;;;;;

(defconstant +big-num+ 600851475143)

(defun is-prime-rec (n d)
(cond
  ((= 0 (mod n d)) nil)
  ((= 0 (mod n (+ d 2))) nil)
  ((> (* d d) n) t)
  (t (is-prime-rec n (+ d 6)))))

(defun is-prime (n)
  (when (or (= 0 (mod n 2)) (= 0 (mod n 3))) (return-from is-prime nil))
  (is-prime-rec n 5))


; (print (is-prime 1597))

(defvar *largest* 0)

(dotimes (x +big-num+)
  (print x)
  (when (and (= 0 (mod +big-num+ is-prime x) (setf *largest* x)))

(print *largest*)