a の累乗 a^N を次の方法で速く計算できる。
N を二進法で
と展開する。すると
であり、各 a^{2^{s_i}} は
と、前の数の平方を順次取っていくことで求められる。
普通に累乗計算したときのオーダーは O(N) であるが、この方法なら O(log_2 N) で計算できる。
(例)
3^11の計算
11 = 1 + 2 + 8 = 2^0 + 2^1 + 2^3
なので、
3^1 = 3
3^2 = 9
3^4 = 9^2 = 81
3^8 = 81^2 = 6561
を用いれば
3^11
= 3^{1 + 2 + 8}
= 3^1 × 3^2 × 3^8
= 3 × 9 × 6561
= 177147
最終更新:2012年08月31日 03:32