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


© 2022 wat-aro