1. 程式人生 > >歐幾里得和擴充套件歐幾里得!!!

歐幾里得和擴充套件歐幾里得!!!

歐幾里得:

是求兩個數的最大公約數:

int gcd(int a, int b)
{
    if(b==0) return a;
    return gcd(b, a%b);
}

擴充套件歐幾里得:

已知a, b求解二元一次方程ax+by =gcd(a, b)的一組解(x,y);

int exgcd(int a,int b,int &x,int &y)
{
     if(b==0)
    {
        x=1;
        y=0;
        return a;
    }
    int gcd=exgcd(b,a%b,x,y);
    int x2=x,y2=y;
    x=y2;
    y=x2-(a/b)*y2;
    return gcd;
}

設a,b,c為任意整數,g=gcd(a,b),方程ax+by=g的一組解是(x0, y0),則

當c是g的倍數時ax+by=c的一組解是(x0c/g, y0c/g);

當c不是g的倍數時無整數解。