Code Review
Compare your solutions
#| BEGIN (Write your solution here) |#
(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)
(define (try-it a)
(= (expmod a n n) a))
(try-it (+ 1 (random (- n 1)))))
(define (fast-prime? n times)
(cond ((= times 0) #t)
((fermat-test n)
(fast-prime? n (- times 1)))
(else #f)))
(define (prime? n)
(fast-prime? n 100))
(define (carmichael-test n)
(prime? n))
#| END |#
#| BEGIN (Write your solution here) |#
(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)
(define (try-it a n)
(= (expmod a n n) a))
(try-it a n))
(define (fast-prime? n times)
(cond ((= times 0) #t)
((fermat-test n)
(fast-prime? n (- times 1)))
(else #f)))
(define (carmichael-test n)
(define (carmichael-test-iter acc n)
(cond ((= acc n) #t)
((fermat-test n acc)
(carmichael-test-iter (+ acc 1) n))
(else #f)))
(carmichael-test-iter 1 n))
#| END |#
#| BEGIN (Write your solution here) |#
(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)
(define (try-it a)
(= (expmod a n n) a))
(try-it (+ 1 (random (- n 1)))))
(define (fast-prime? n times)
(cond ((= times 0) #t)
((fermat-test n)
(fast-prime? n (- times 1)))
(else #f)))
(define (prime? n)
(fast-prime? n 100))
(define (carmichael-test n)
(prime? n))
#| END |#
#| BEGIN (Write your solution here) |#
(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)
(define (try-it a n)
(= (expmod a n n) a))
(try-it a n))
(define (fast-prime? n times)
(cond ((= times 0) #t)
((fermat-test n)
(fast-prime? n (- times 1)))
(else #f)))
(define (carmichael-test n)
(define (carmichael-test-iter acc n)
(cond ((= acc n) #t)
((fermat-test n acc)
(carmichael-test-iter (+ acc 1) n))
(else #f)))
(carmichael-test-iter 1 n))
#| END |#