问题
有式子
a
∗
x
+
b
∗
y
=
c
a*x+b*y= c
a∗x+b∗y=c 其中
a
,
b
,
c
a,b,c
a,b,c已知,求
x
,
y
x,y
x,y。
如果
c
c
c是
g
c
d
(
a
,
b
)
gcd(a, b)
gcd(a,b)的倍数,那么该方程有整数解,能用扩展欧几里得求解。
应用
扩展欧几里德算法:用来在已知
a
,
b
a, b
a,b 后 求解一组
x
,
y
x,y
x,y ,使得
a
∗
x
+
b
∗
y
=
g
c
d
(
a
,
b
)
a*x+b*y=gcd(a,b)
a∗x+b∗y=gcd(a,b)成立。
(解一定存在,根据数论中的相关定理)。
实际应用中, e x g c d exgcd exgcd并不能处理 a , b a,b a,b是负数的情况,当 a , b a,b a,b是负数时,一般根据题意采取等价的取相反数做法。
代码
int exGcd(int a, int b, int &x, int &y){//已知a,b后求解一组x,y使得a*x+b*y=gcd(a,b)成立
if(b == 0){
x = 1, y = 0;
return a;
}
int result = exGcd(b, a % b, x, y);
int tem = x;
x = y;
y = tem - a / b * y;
return result;
}
参考来源
博客
https://blog.csdn.net/u012860063/article/details/39760003
博客
https://www.cnblogs.com/RiverHamster/p/exgcd.html