2015/10/07
SICP 問題1.26
(define (expmod base exp m)
(cond ((= exp 0) 1)
((even? exp)
(remainder (* (expmod base (/ exp 2) m)
(expmod base (/ exp 2) m))
m))
(else (remainder (* base (expmod base (- exp 1) m))
m))))
square を使わないことで * の部分で (expomd base (/ exp 2) m)
が二回呼ばれているため.逐次平方になっていない.