有关扩展欧几里得

//返回d=gcd(a,b);
//返回的x和y即为ax+by=d中x和y的解

ll exgcd(ll a,ll b,ll &x,ll &y){
    if(a==0&&b==0) return -1;//无最大公约数
    if(b==0){x=1;y=0;return a;}
    ll d=exgcd(b,a%b,y,x);
    y-=a/b*x;
    return d;
}

如果要求二元一次方程ax+by=c的多组解x1和y1

先求出ax+by=gcd(a,b)的解x0和y0(代码中的返回值x,y即是答案)

x1=x0+b/gcd(a,b)*t        y1=y0+a/gcd(a,b)*t     (t为整数,正负皆可)            

猜你喜欢

转载自blog.csdn.net/qq_41758381/article/details/82917842