Fast Power
- lintcode: (140) Fast Power
即 a 与 b 的乘积模 p 的值等于 a, b 分别模 p 相乘后再模 p 的值,只能帮你到这儿了,不看以下的答案先想想知道此关系后如何解这道题。
a^n = a^{n/2} \cdot a^{n/2} = a^{n/4} \cdot a^{n/4} \cdot a^{n/4} \cdot a^{n/4} \cdot = …
分三种情况讨论 n 的值,需要特别注意的是,虽然此时 a^0 的值为1,但是不可直接返回1,因为b == 1
时应该返回0,故稳妥的写法为返回.
使用了临时变量product
,空间复杂度为 O(1), 递归层数约为 \log n, 时间复杂度为 O(\log n), 栈空间复杂度也为 O(\log n).