题意:
给定A,B,C,表示有一条方程为Ax+By+C=0的直线。 问是否存在一个点(x,y),满足x和y都是整数,且在直线上。 如果无解输出-1,否则输出一组解。
数据范围:-2e9<=A,B,C<=2e9
解法:
式子改为Ax+By=-C,发现就是个同余方程, 那么问题变为求同余方程的一组整数解,上exgcd即可。
设d=gcd(A,B),有解的条件是C能被d整除。
code:
#include<bits/stdc++.h>
using namespace std
;
#define int long long
const int maxm
=1e5+5;
int exgcd(int a
,int b
,int &x
,int &y
){
if(b
==0){
x
=1,y
=0;
return a
;
}
int d
=exgcd(b
,a
%b
,y
,x
);
y
-=a
/b
*x
;
return d
;
}
signed main(){
int A
,B
,C
;cin
>>A
>>B
>>C
;
int x
,y
;
C
=-C
;
int d
=exgcd(A
,B
,x
,y
);
if(C
%d
)cout
<<-1<<endl
;
else{
x
*=C
/d
;
y
*=C
/d
;
cout
<<x
<<' '<<y
<<endl
;
}
return 0;
}