Codeforces7 C.Line(exgcd)

    科技2022-08-05  108

    题意:

    给定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;//exgcd算出来的一组特解需要乘上C/d y*=C/d; cout<<x<<' '<<y<<endl; } return 0; }
    Processed: 0.010, SQL: 8