(defn random [n] (math/floor (* n (math/random)))) (defn square [n] (* n n)) (defn divides? [a b] (= (mod b a) 0)) (defn expmod [base exp m] (cond (= exp 0) 1 (even? exp) (mod (square (expmod base (/ exp 2) m)) m) (mod (* base (expmod base (- exp 1) m)) m))) (defn fermat-test [n] (defn iter [a] (cond (= a 0) true (= (expmod a n n) a) (iter (- a 1)) false)) (iter (- n 1))) (print (fermat-test 561)) (print (fermat-test 1105)) (print (fermat-test 1729)) (print (fermat-test 2465)) (print (fermat-test 2821)) (print (fermat-test 6601))