快速幂算法智障式理解

快速幂算法智障式理解

为什么写这一篇博客

蒟蒻鱼暑假去了趟美国,玩得很开心。

可正可谓 八月暑假一场空,没写作业见祖宗 ----鲁迅

蒟蒻鱼回家后便开始补它堆积成山的作业

当还有五天开学时,它补完了

可它发现,暑假作业似乎格式化了蒟蒻鱼大脑存储算法的那一部分

它,不记得所有算法了 [恐惧]

蒟蒻鱼开始狂补算法

可它补到一半,发现远古算法快速幂竟然都不会了,经过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;
}

That's All

原文地址:https://www.cnblogs.com/XJack/p/11399268.html