快速乘+快速幂
最近在刷数论的题目什么扩展欧几里得,卢卡斯 发现我高中学的东西都忘记了,我做了一道等比数列求和的问题,我直接推出结论然后想用快速幂直接解决问题但是被卡时间了,超时了,我看见大佬们有两种做法,一种是二分快速幂,一种就直接快速乘的方式就省了时间,下面是模板a^b mod p;
typedef long long ll;
ll mul(ll a,ll b,ll p){
ll res=0;
while (b != 0)
{
if (b&1)
res = (res+a)%p;
b = b >> 1;
a = (a+a)%p;
}
return res;
}
ll qmi(ll a,ll b,ll p){
ll ans=1;
while(b){
if(b&1)ans=mul(ans,a,p);
b>>=1;
a=mul(a,a,p);
}
return ans;
}