Code Review

Compare your solutions

    #| BEGIN (Введите свое решение) |#
(define (square x) 
  (* x x))

(define (even? n)
  (= (remainder n 2) 0))

(define (expmod base exp m)
  (cond ((= exp 0) 1)
        ((even? exp)
         (let ((x (expmod base (/ exp 2) m)))
           (let ((sqr (remainder (square x) m)))
             (if (and (= sqr 1)
                      (not (= x 1))
                      (not (= x (- m 1))))
                 0
                 sqr))))
        (else
          (remainder (* base (expmod base (- exp 1) m))
                     m))))

(define (miller-rabin-test n)
  (define (iter a)
    (if (= a 0) 
      #t 
      (if (= (expmod a (- n 1) n) 0)
        #f
        (iter (- a 1)))))
  (iter (- n 1)))
#| END |#