Learning/SICP/exercise_1_26.janet
2025-05-29 22:00:25 +02:00

30 lines
587 B
Plaintext

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