首页 > 其他 > 详细

快速幂初步学习

时间:2017-05-07 22:59:18      阅读:238      评论:0      收藏:0      [点我收藏+]

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

 

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

  

 

快速幂初步学习

原文:http://www.cnblogs.com/NDKY9/p/6822612.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!