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

(define (carmichael-test test-n)
  (define (fast-prime? n a)
    (cond ((= a 1) #t)
          ((fermat-test n a) (fast-prime? n (- a 1)))
          (else #f)))
  (fast-prime? test-n (- test-n 1)))
#| END |#