- Код: Избери целия код
(defun square (n)
(* n n))
(defun divides? (a b)
(= (rem a b) 0))
(defun find-divisor (n test-divisor)
(cond ((> (square test-divisor) n) n)
((divides? n test-divisor) test-divisor)
(T (find-divisor n (+ test-divisor 1)))))
(defun smallest-divisor (n)
(find-divisor n 2))
(defun prime? (n)
(= n (smallest-divisor n)))
(defun expmod (b e m)
(cond ((= e 0) 1)
((evenp e)
(rem (square (expmod b (/ e 2) m)) m))
(T (rem (* b (expmod b (- e 1) m)) m))))
(defun fermat-test-for-a (n test-a)
(if (< test-a n)
(if (= (expmod test-a n n) test-a)
(fermat-test-for-a n (+ test-a 1))
nil)
T))
(defun fermat-test (n)
(fermat-test-for-a n 1))
(defun false-fermat-iter (max-n n)
(if (fermat-test n)
(if (prime? n)
(if (< n max-n)
(false-fermat-iter max-n (+ n 1)))
n)
(if (< n max-n)
(false-fermat-iter max-n (+ n 1)))))
(defun false-fermat (min-n max-n)
(false-fermat-iter max-n min-n))
И в Listener опитах това:
- Код: Избери целия код
CL-USER 15 > false-fermat 7 1247
561
CL-USER 16 > false-fermat 1247 2489
1729

Меню