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) が二回呼ばれているため.逐次平方になっていない.
 (wat-aro)
(wat-aro)