RosettaCodeData/Task/Modular-exponentiation/Common-Lisp/modular-exponentiation-3.lisp

7 lines
192 B
Common Lisp

(defun mod-expt (a n m)
(loop with c = 1 while (plusp n) do
(if (oddp n) (setf c (mod (* a c) m)))
(setf n (ash n -1))
(setf a (mod (* a a) m))
finally (return c)))