首页 > 其他 > 详细

对快速幂的理解

时间:2017-01-19 13:58:47      阅读:158      评论:0      收藏:0      [点我收藏+]

以下是本人自己的看法,如果有不对请指出:

 

 

 

快速幂其实就是一种简化计算幂所需时间的方法 ;

模板代码如下:  

假设求 a^b%mod 

int res=1;

while(b)

{

  if(b&1) res=res*a%mod [1]  

       // (b&1)是二进制的与,用于判断最低位是否有1; 这里运用了模的基本算法  (a*b*c)%mod=(a%mod*b%mod*c%mod)%mod

  a=a*a;   //将a 进行平方 (这里写a=a*a%mod 也可以),在[1]式中又会取模消掉。

 b=b/2;   // 除2相当于二进制向后移动一位

}

answer=res%mod

接下来我们用一个例子来验证一下,加深理解 ;

求  2^5%3

b=5 res=1*2%3=2
a=2^2
b=2

b=2
a=2^4
b=1

b=1 res=((1*2%3)*(2^4)%3)%3=2
a=2^8
b=0
因为b=0循环结束

验证了下代码的正确性,有时候如果不懂代码的内涵可以把数据带进去可以方便理解。

对快速幂的理解

原文:http://www.cnblogs.com/p-s-h/p/6306115.html

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