快速幂的思想
Posted summer20020929
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速幂的思想相关的知识,希望对你有一定的参考价值。
预备知识:
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;
}
以上是关于快速幂的思想的主要内容,如果未能解决你的问题,请参考以下文章