(define(expmod base exp m)(define check
(lambda(a1)(let((a2(remainder(square a1) m)))(if(and(= a21)(> a11)(< a1(- m 1)))0 a2))))(cond((= exp 0)1)((even? exp)(check(expmod base (/ exp 2) m)))(else(remainder(* base (expmod base (- exp 1) m)) m))))(define(Miller-Rabin-test n)(define(try-it a)(=(expmod a (- n 1) n)1)); a ^ (n-1) % n == 1 (try-it(+1(random(- n 1)))))(define(fast-prime? n times)(cond((= times 0) #t)((Miller-Rabin-test n)(fast-prime? n (- times 1)))(else #f)))(define(even? x)(=(remainder x 2)0))(define(square x)(* x x))(fast-prime? 113)
两个let
(define(expmod base exp m)(cond((= exp 0)1)((even? exp)(let((a1(expmod base (/ exp 2) m)))(let((a2(remainder(square a1) m)))(if(and(= a21)(> a11)(< a1(- m 1)))0 a2))))(else(remainder(* base (expmod base (- exp 1) m)) m))))(define(Miller-Rabin-test n)(define(try-it a)(=(expmod a (- n 1) n)1)); a ^ (n-1) % n == 1 (try-it(+1(random(- n 1)))))(define(fast-prime? n times)(cond((= times 0) #t)((Miller-Rabin-test n)(fast-prime? n (- times 1)))(else #f)))(define(even? x)(=(remainder x 2)0))(define(square x)(* x x))(fast-prime? 113)