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

快速幂&&快速幂驱魔

时间:2015-04-24 21:09:13      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:

以下以求a的b次方来介绍[1] 

把b转换成二进制数

该二进制数第i位的权为

例如

11的二进制是1011

11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1

因此,我们将a¹¹转化为算

 

 

__int64 pow3(inta,intb)//快速幂

{

        __Int64 r=1,base=a;

        while(b)

        {

                 if(b&1)

                         r*=base;

                 base*=base;

                 b>>=1;//①

        }

        return r;

}

 

__int64 qpow(int a,int b,int c)

{

__int64 r=1,base=a;

while(b)

{

if(b&1)

r=(r*base)%c;//②

base=(base*base)%c;

b>>=1;

}

return r%c;

 

①   >> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0

②   r*=base%c;//这是错误的写法,不能对快速幂求模的公式直接加上%r,*=注意

③   快速幂取模思想: a*b mod c= ((a mod c) *b) mod c 

 

快速幂&&快速幂驱魔

标签:

原文地址:http://www.cnblogs.com/travelller/p/4454398.html

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