先写代码
(defn square [x] (* x x))
(defn expmod[base exp m](cond (= exp 0) 1(even? exp) (mod (square (expmod base (/ exp 2) m)) m):else (mod (* base (expmod base (- exp 1) m)) m)))(defn fermat-test[n](defn try-it [a](cond (= a n) (println "test end" n);(= (expmod a n n) (mod a n)) (try-it (+ 1 a)):else (println "no") ))(try-it (+ 1 0))
)
执行结果如下
输出结果显示,对于每一个小于561的数字,他的561次方 和他与561的模相同,也就是通过了测试。
对于一个非素数,执行结果显示为no,表明没有逃过费曼检查测试。