快速幂初步学习

快速幂顾名思义就是快速求幂,也常用于求幂的模(余数)

 

例如求Xq,常规算法是乘qX,时间复杂度为O(n),而快速幂复杂度为O(log2n),我们看下如何实现

 

n用二进制可写成2k1+2K2+...2kn

 

Xn=X2^k1+2^k2+...+2^kn=X2^k1·X2^k2·...·X2^kn 

 

从二进制n的末尾开始,累乘x,即通项为X2^kn ,若n的该位为1累乘通项,从右往左删掉n的每一位直到n为0

int fun(int x,int n){
	int ans=1,base=x;
	while(n!=0){
		if(n&1)		//若二进制数最后一位为1返回1 
			ans*=base;
		base*=base; 
		n>>=1;		//去掉二进制数n最后一位
	}
	return ans;
}

  

 

posted @ 2017-05-07 22:15  小九xD  阅读(168)  评论(0编辑  收藏  举报