美文网首页
拓展欧几里得证明

拓展欧几里得证明

作者: 不给赞就别想跑哼 | 来源:发表于2018-10-11 13:05 被阅读13次

    看了许久书终于从似懂非懂走了出来

    设ax+by=gcd(a,b),解出符合条件的x,y;
    当b=0时,很显然有一组必然解,x=1,y=0,即1a+00=gcd(a,b)=a;
    即我们讨论b!=0的情况;

    ax+by=gcd(a,b)=gcd(b,a%b);

    令一组解x1,y1使得x1b+y1(a%b)=gcd(b,a%b) =gcd(a,b) = ax+by;
    a/b=k…r,k=a/b下取整,所以a%b=a-(a/b向下取整
    b);

    所以x1b+y1( a-(a/b向下取整b) ) 化简得
    y1*a+b(x1-y1(a/b向下取整))
    所以x=y1,y=x1-y1(a/b向下取整)

    x1,y1,在下层已经求得,从而递推出x,y,最下面一层的解为x=1,y=0;

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    using namespace std;
    exgcd(int a,int b,int &d,int &x,int &y){
        if(!b){x=1,y=0;d=a};
        else{
            exgcd(b,a%b,d,x,y);
            int t=x; x=y; y=t-y*(a/b);
        }
    }
    
    

    相关文章

      网友评论

          本文标题:拓展欧几里得证明

          本文链接:https://www.haomeiwen.com/subject/eoqvaftx.html