Code Review

Compare your solutions

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

(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 (fermat-test a n)
  (= (expmod a n n) a))

(define (carmichael-test n)
  (define (iter a)
    (cond ((>= a n) #t)
          ((fermat-test a n) (iter (+ a 1)))
          (else #f)))
  (iter 1))
#| END |#