题意:输入a,b,c,求方程ax + by + c = 0的解,不存在输出-1
题解:扩展欧几里得的变式,ex_gcd想完全理解不太容易,需要数论的基础,我们目前只要会用就行。
ax + by = gcd(a,b),一定存在x,y使这个式子成立.
模板所做的就是:输入a,b。得到x,y以及gcd(a,b)。
再看原题,移项得 ax + by = -c,把右边变成gcd(a,b) 得
于是新的x = cx/gcd, y = cx/gcd
#include <bits/stdc++.h>
long long gcd(long long a, long long b, long long &x, long long &y){
long long d = a;
if(b != 0){
d = gcd(b, a % b, y, x);
y -= (a / b) * x;
}
else{
x = 1;
y = 0;
}
return d;
}
int main(){
long long a, b, c, d, x, y;
scanf("%lld %lld %lld", &a, &b, &c);
d = gcd(a, b, x, y);
c = -c;
if(c % d != 0)
printf("-1\n");
else
printf("%lld %lld\n", x * c / d, y * c / d);
return 0;
}