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)
          (remainder (square (expmod base (/ exp 2) m))
                     m))
        (else 
          (remainder (* base (expmod base (- exp 1) m))
                     m))))

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