首页 > 其他 > 详细

葫芦娃关于快速幂流程的详细讲解

时间:2015-02-16 18:21:57      阅读:246      评论:0      收藏:0      [点我收藏+]

快速幂的流程大概是这样的,维护一个等式a^b=x^y*z。

 

比如说现在求3的10次方

 

第一步:3^10=3^10*1

 

第二步:3^10*1=9^5*1

 

第三步:9^5*1=9^4*9

 

第四步:9^4*9=81^2*9

 

第五步:81^2*9=6561^1*9

 

第六步:6561^1*9=1^1*59049

 

所以3^10=59049

 

上面总共进行了五次乘法运算,相比较朴素的十次来说,要好一些

 

经过上面的演算,抽象成自然语言大概是这样:

 

初始化,x=a,y=b,z=1,

 

每一次,首先如果y不大于0则退出,

 

然后判断y,若为奇数,那么z=z*x,

 

最后,y=y/2。

 

退出之后答案就是z了。


附上我的实现代码:

int work(int a,int b)
{
	int x=a,y=b,z=1;
	while(y>0)
	{
		if(y&1)
			z*=x;
		x*=x;
		y>>=1;
	}
	return z;
}


葫芦娃关于快速幂流程的详细讲解

原文:http://blog.csdn.net/stl112514/article/details/43853393

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