累乗はモノイドに対して定義できる。

繰り返し二乗法

$a^{11} = a^{8 + 2 + 1}= a^8 a^2 a^1$ と考えて計算をする(指数の部分の2進展開をする)

$a$ の 2べき乗の部分は

と計算していく。

モノイドに一般化できる

$a^k$ の計算量は $O(\log k)$

(積が $O(1)$ で計算できるとする。)

ダブリング

概要

$f: [N] \to [N]$ に対して前処理をすると、$k \leq K$ に対して $f^k (x)$ が高速に計算できる。ただし、$f^k$ は $f$ の $k$ 回合成とする。