利用快速幂求法,求幂
int main()
{int a=3,b=100;//求a^b的值,用快速幂
double c=1,temp=b;
while(b)
{
if(b&1==1)
c=temp*c ;
temp*=temp;
b>>=1;
}
cout<<c<<endl;
}
快速幂求模
int
f(
int
a,
int
b,
int
n){
int
t,y;
t=1; y=a;
while
(b!=0){
if
(b&1==1){t=t*y%n;}
y=y*y%n; b=b>>1;
}
return
t;
}
把b转换成
二进制数。
该二进制数第i位的权为
例如
11的二进制是1011
11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1
因此,我们将a¹¹转化为算
从低位到高位 ,依次对应高一位的 数,为低位数翻一翻,例如 最低位为a,次低位为a×a,最后把每一位相乘起来得到 最后结果