快速幂算法智障式理解
快速幂算法智障式理解
为什么写这一篇博客
蒟蒻鱼暑假去了趟美国,玩得很开心。
可正可谓 八月暑假一场空,没写作业见祖宗 ----鲁迅
蒟蒻鱼回家后便开始补它堆积成山的作业
当还有五天开学时,它补完了
可它发现,暑假作业似乎格式化了蒟蒻鱼大脑存储算法的那一部分
它,不记得所有算法了 [恐惧]
蒟蒻鱼开始狂补算法
可它补到一半,发现远古算法快速幂竟然都不会了,经过15分钟的深思熟虑,它终于搞懂了。
为避免以后再忘记,它准备打这一篇博客
探讨 x的n次方
快速幂算法基于的是二进制拆分的思想
即:将n转换为二进制数,并利用二进制数的性质计算幂,以减小时间复杂度
举个栗子
计算 n的11次方即n的(1011)2次方
poww(n,11) = n* n2*n8
很显然,算法的本质就是如此
利用一个变量不断地*=自己本身
并依次判断指数的二进制数每一位是否为一达到二进制拆分的效果
贴代码
int poww(int x,int n)
{
int ans=1,base=x;
while(n){
if(n&1) ans*=base;
base*=base;
n>>=1;
}
return ans;
}