扩展欧几里得算法是欧几里得(又叫辗转相除法)的扩展。除了计算a、b两个整数的最大公约数,此算法还能找到整数x、y(其中一个很可能是负数)为:ax+by=gcd(a,b)的解。


 

 

证明

  设x1,y1是方程:ax+by=gcd(a,b)的解

  已知:gcd(a,b)=gcd(b,a%b);

  设x2,y2是方程:ax+by=gcd(b,a%b)的解

  可得:bx2+(a%b)y2=gcd(b,a%b)=ax1+by1

  整理得:ay2+b(x2-a/b*y2)=ax1+by1;

  对比得其中一组特解:x1=y2,y1=x2-a/b*y2;

 

代码模板

int ex_gcd(int a,int b,int &x,int &y)
{
    if(b==0){
        x=1,y=0;
        return a;
    }
    else {
        int r=ex_gcd(b,a%b,x,y);
        int t=x;
        x=y;
        y=t-a/b*y;
        return r;   
    }
}

 

 

  

  

posted on 2020-04-12 15:49  新望  阅读(118)  评论(0)    收藏  举报