代码如下:
(define (check-nontrivial-sqrt-of-one a n)
(define (check-1? t)
(if (and (> a 1)
(< a (- n 1))
(= t 1))
0 t))
(check-1? (remainder (square a) n)))
(define (expmod base exp m)
(cond ((= exp 0) 1)
((even? exp)
;(remainder (square (expmod base (/ exp 2) m)) m))
(check-nontrivial-sqrt-of-one (expmod base (/ exp 2) m) m))
(else
(remainder (* base (expmod base (- exp 1) m)) m))))
(define (miller-rabin-test n)
(define (iter x n)
(cond ((= x 0) #t)
((= (expmod x (- n 1) n) 1) (iter (- x 1) n))
(else #f)))
(iter (- n 1) n))
① 对于