快速幂初步学习

Posted 小九

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速幂初步学习相关的知识,希望对你有一定的参考价值。

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

 

例如求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;
}

  

 

以上是关于快速幂初步学习的主要内容,如果未能解决你的问题,请参考以下文章

算法初步:快速乘,快速幂,矩阵快速幂

快速幂浅谈

学习记录:快速幂

学习记录:快速幂

算法学习快速幂

快速幂:quickpow