习题1.27

先写代码

(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))
)

执行结果如下

习题1.27_第1张图片

输出结果显示,对于每一个小于561的数字,他的561次方 和他与561的模相同,也就是通过了测试。

 

对于一个非素数,执行结果显示为no,表明没有逃过费曼检查测试。

你可能感兴趣的:(计算机程序的构造课后题,clojure)