简单复习一下exgcd(扩展欧几里得)

经典问题:

已知整数 a , b , c a,b,c a,b,c求整数 x , y x,y x,y使得 a x + b y = c ax+by=c ax+by=c

有解情况: g c d ( a , b )    ∣    c gcd(a,b)\ \ |\ \ c gcd(a,b)    c

通过 e x g c d exgcd exgcd求出 a x + b y = g c d ( a , b ) ax+by=gcd(a,b) ax+by=gcd(a,b)的一组解为 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)

a x + b y = c ax+by=c ax+by=c的通解

( x , y ) = ( x 0 ∗ c d + k ∗ b d , y 0 ∗ c d − k ∗ a d ) (x,y)=(\frac{x_0*c}{d}+\frac{k*b}{d},\frac{y_0*c}{d}-\frac{k*a}{d}) (x,y)=(dx0c+dkb,dy0cdka)

其中, k k k是任意整数, d = g c d ( a , b ) d=gcd(a,b) d=gcd(a,b)

void exgcd(int a,int b,int &gcd,int &x,int &y) {//求解ax+by=gcd(a,b)
	if(b==0) {
		x=1;y=0;gcd=a;return ;
	}
	exgcd(b,a%b,x,y);
	ll ret=x;x=y;y=ret-a/b*y;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值