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

快速幂的思想

时间:2018-10-07 20:23:10      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:思想   bsp   处理   次方   back   font   整数   代码   就是   

预备知识:
a*b%p=((a%p)*b)%p
(a+b)%p=(a%p+b)%p
         

快速幂就是快速求一个数的幂

两个整数a,b,求a^b

把b分解成几个2的次方的和,然后就相当于做一个指数乘法

比如说2^11

11=2^3+2^1+2^0

ans=2^(2^3+2^1+2^0)=2^(2^3)*2^(*2^1)+2^(2^0)

代码:

long long ksm(long  long a,long long  b){
long long ans=1;
while(b){
if(b&1==1)     ans*=a; //是因为3/2=1,有一个a^1要处理
a*=a;
b/=2;
}
return ans;
}

         

有一道思想一致的题:求a*b%p的结果,1<=a,b。p<=10^18。

比如11*16
16=2^4;
ans=11*2^4
 
代码如下:

long long zc(long long a,long long b,long long c){
long long ans=0;
while(b){
if(b&1==1)ans=(ans+a)%c;
a=(a+a)%c;
b/=2;
}
return ans;
}

 

快速幂的思想

标签:思想   bsp   处理   次方   back   font   整数   代码   就是   

原文地址:https://www.cnblogs.com/SUMMER20020929/p/9751109.html

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