拓展欧几里得 edgcd 模板+简易推论

LL exgcd(LL a,LL b, LL &x, LL &y) {	
	if(b == 0) {
		x=1,y=0;
		return a;
	}
	LL d = exgcd(b, a%b, x, y);
	//x=x1,y=y1
	LL z = x;//z=x1
	x = y;//x=y1
	y = z - y * (a / b);
	return d;
}

a x + b y = = g c d ( x , y ) ax + by == gcd(x,y) ax+by==gcd(x,y) 的最小整数解

假设 a x + b y = = g c d ( x , y ) ax+by == gcd(x,y) ax+by==gcd(x,y)
可得 a x + b y = = g c d ( y , x m o d y ) ax+by == gcd(y,xmody) ax+by==gcd(y,xmody)
构造 b x 1 + ( a m o d b ) y 1 = = g c d ( y , x m o d y ) bx1+(amodb) y1 == gcd(y,xmody) bx1+(amodb)y1==gcd(y,xmody)
可得 b x 1 + ( a − ( a / b × b ) ) y 1 = = g c d ( y , x m o d y ) bx1+(a-(a/b \times b)) y1 == gcd(y,xmody) bx1+(a(a/b×b))y1==gcd(y,xmody)
化简左项
b x 1 + ( a y 1 − ( a / b × b ) y 1 ) bx1+(ay1-(a/b \times b)y1) bx1+(ay1(a/b×b)y1)
= = b x 1 + a y 1 − ( a / b × b × y 1 ) == bx1+ay1-(a/b \times b \times y1) ==bx1+ay1(a/b×b×y1)
= = a y 1 + b ( x 1 − a / b × b × y 1 ) == ay1+b(x1-a/b \times b \times y1) ==ay1+b(x1a/b×b×y1)
x = y 1 , y = x 1 − a / b × b × y 1 x = y1, y = x1-a/b \times b \times y1 x=y1,y=x1a/b×b×y1

posted @ 2022-07-15 18:37  Nogtade  阅读(3)  评论(0编辑  收藏  举报  来源