个人博客:快速幂&快速幂取模的分析与代码实现 | Iwts’s blog
写在前面
在网上搜了相关内容,感觉写的都不是特别详细,也没有人讲,只能自己理解了。下面会写一下这3个算法的分析与实现。当然都是基于自己的理解。因为博主搜了很多博客都是没有详细的解释,数学渣一脸懵逼啊。所以关于原理的解释如果有错误请一定要评论我改正!
朴素的求幂算法
也就是平常使用pow函数,最简单的实现就是一直累乘,可以得到这样的代码:
int Pow(int a,int b){
int ans = 1;
for(int i = 0;i < b;i++){
ans *= a;
}
return ans;
}
可以看到,算法的时间复杂度是O(n)。为了降低时间复杂度,我们可以使用快速幂算法,将时间复杂度降低到O(logn),n是幂。
快速幂
关于快速幂,博主的理解是使用位运算。下面是数学证明:
关于a^b,举一个实际的例子——2^10。
那么对于6而言,如果我们将10变成二进制,那