码迷,mamicode.com
首页 > 其他好文 > 详细

快速幂初步学习

时间:2017-05-07 23:11:58      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:style   amp   删掉   时间复杂度   turn   span   二进制   学习   ...   

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

 

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

  

 

快速幂初步学习

标签:style   amp   删掉   时间复杂度   turn   span   二进制   学习   ...   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!