快速乘+快速幂

最近在刷数论的题目什么扩展欧几里得,卢卡斯 发现我高中学的东西都忘记了,我做了一道等比数列求和的问题,我直接推出结论然后想用快速幂直接解决问题但是被卡时间了,超时了,我看见大佬们有两种做法,一种是二分快速幂,一种就直接快速乘的方式就省了时间,下面是模板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;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务