拓展欧几里得 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(x1−a/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=x1−a/b×b×y1