快速幂
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
其实快速幂很简单,
只需将一个幂拆解即可。
* 例:
Ab=(Ab/2)2=((Ab/4)2)2=⋅⋅⋅⋅⋅⋅A^b =(A^{b/2})^2 = ((A^{b/4})^2)^2 = ······Ab=(Ab/2)2=((Ab/4)2)2=⋅⋅⋅⋅⋅⋅ 直到指数为0
所以当 b≡0(mod2)b \equiv 0 \pmod{2}b≡0(mod2) 时可以得到以下代码:
* 注 :b>>1b>>1b>>1 可视为 b/2b/2b/2
那如果 b≡1(mod2)b \equiv 1 \pmod{2}b≡1(mod2) 怎么办呢?
只需将 AbA^bAb 转换为 A∗Ab−1A*A^{b-1}A∗Ab−1就行了
于是,我们便得出核心代码
整理代码: