#裴蜀定理#CF7C Line
题目
给定三个整数\(a,b,c\),问是否能找到两个数\(x,y\)使得\(ax+by+c=0\),没有则输出-1
分析
先把式子转换成\(ax+by=-c\)
然后\(x,y\)是整数当且仅当\(ax+by=gcd(a,b)\)
那么\(gcd(a,b)|-c\)
通过扩欧算出\(ax+by=gcd(a,b)\)的情况
如果\(gcd(a,b)\)不是\(-c\)的约数,那么方程无解
否则将\(x,y\)分别扩大\(-\frac{c}{gcd(a,b)}\)倍即为答案
代码
#include <cstdio>
#define rr register
using namespace std;
int a,b,c,gcd,x,y; long long xx,yy;
inline signed exgcd(int a,int b,int &x,int &y){
if (!b) {
x=1,y=0;
return a;
}else{
rr int now=exgcd(b,a%b,y,x);
y-=a/b*x;
return now;
}
}
signed main(){
scanf("%d%d%d",&a,&b,&c),c=-c;
gcd=exgcd(a,b,x,y);
if (c%gcd) return !printf("-1");
xx=1ll*x*(c/gcd),yy=1ll*y*(c/gcd);
return !printf("%lld %lld",xx,yy);
}