问题
有式子a∗x+b∗y=ca*x+b*y= ca∗x+b∗y=c 其中a,b,ca,b,ca,b,c已知,求x,yx,yx,y。
如果ccc是gcd(a,b)gcd(a, b)gcd(a,b)的倍数,那么该方程有整数解,能用扩展欧几里得求解。
应用
扩展欧几里德算法:用来在已知 a,ba, ba,b 后 求解一组 x,yx,yx,y ,使得 a∗x+b∗y=gcd(a,b)a*x+b*y=gcd(a,b)a∗x+b∗y=gcd(a,b)成立。
(解一定存在,根据数论中的相关定理)。
实际应用中,exgcdexgcdexgcd并不能处理a,ba,ba,b是负数的情况,当a,ba,ba,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.youkuaiyun.com/u012860063/article/details/39760003
博客
https://www.cnblogs.com/RiverHamster/p/exgcd.html