扩展欧几里德算法证明及例题

ax + by = gcd(a,b) = gcd(b,a%b) = b x 1 x_1 x1 + (a - a b b ) y 1 = a y 1 + b ( x 1 − a b y 1 \frac{a}{b}b)y_1 = ay_1 + b(x_1 - \frac{a}{b}y_1 bab)y1=ay1+b(x1bay1)

考虑gcd的调用顺序 有 x = y 1 y_1 y1, y = ( x 1 x_1 x1 - a b y 1 \frac{a}{b}y_1 bay1)

当b == 0 时,则有 x = 1,y = 0;

故有代码为

int exgcd(int a,int b,int &x,int &y){
	if(b == 0){
		x = 1,y = 0;
		return a;
	}
	int d = exgcd(b,a%b,y,x);// 这里直接交换了x,y
	y -= a/b * x;
	return d;
}

性质1:
假设求出了一组合法的解。(x,y) 对于另外的一组解 (m,n)

ax + by = am + bn -> a(x-m) = b(y-n)

设g = gcd(a,b) a 1 = a g a_1 = \frac{a}{g} a1=ga b 1 = b g b_1 = \frac{b}{g} b1=gb

a 1 a_1 a1(x-m) = b 1 b_1 b1(y-n)

因为 a 1 和 b 1 a_1 和 b_1 a1b1 互质,故(x-m) = k b 1 kb_1 kb1 同时解除(y-n) = − k a 1 -ka_1 ka1

故(m,n) = ( x − k b 1 x-kb_1 xkb1, y + k a 1 y+ka_1 y+ka1)

性质2

a x + b y = c ax + by = c ax+by=c 若 c | gcd(a,b) 则有解 反之,无解。

例题:
同余方程
有理数取余
青蛙的约会

待更

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值