http://codeforces.com/contest/7/problem/C
简单的扩展欧几里得算法的变形,问二元一次方程的整数解
首先肯定是有解的,整数解需要保证k * gcd(a, b) = ax + by,也就是我们需要保证 -c % gcd(a, b) == 0,因此最终结果也是kx和ky,简单的扩展欧几里得算法变形,差点忘了它是干什么用的了,解二元一次方程啊。。。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<cmath>
#define ll long long
#define mod 998244353
#define inf 0x3f3f3f3f
using namespace std;
#define ll long long
ll exgcd(ll a, ll b, ll &x, ll &y)
{
if(b == 0)
{
x = 1;
y = 0;
return a;
}
int r = exgcd(b, a % b, x, y);
int t = x;
x = y;
y = t - a / b * y;
return r;
}
int main()
{
ll A, B, C;
ll x, y;
cin>>A>>B>>C;
int gcd = exgcd(A, B, x, y);
if(-C % gcd) printf("-1\n");
else
{
ll k = (-C) / gcd;
cout<<k*x<<' '<<k*y<<endl;
}
return 0;
}