扩展gcd以及同余方程ax=b(mod M)

105 篇文章 0 订阅
57 篇文章 0 订阅

关于扩展gcd其实没有必要搞懂,背下来就好了如果不会的自行学习

对于方程ax=b(mod M),我们可以将其化简成为ax+My=b,让后用扩展gcd求解

当b|r=gcd(a,M)时,方程有r个解,否则无解,对于有解的情况,每个解为用gcd求出的x乘上b/r+k*(M/r)

int extgcd(int a,int b,int& x,int& y){
	if(b){
		int r=extgcd(b,a%b,y,x);
		y-=x*(a/b); return r;
	} else { x=1; y=0; return a; }
}
int solve(int a,int b,int M){
	int x,y,r=extgcd(A,M,x,y);
	if(B%r) return -1; else x=(x+M)%M*b/r;
	// return x; 这个是返回通解
	return x%(M/r); //返回最小解
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值