zoukankan      html  css  js  c++  java
  • 扩展欧几里得

      算ax+by=gcd(a, b)

    void exgcd( ll a, ll b, ll &d, ll &x, ll &y ){  
        if( !b ) {
            d = a, x = 1, y = 0;        
        }
        else {
            exgcd( b, a%b, d, y, x );
            y -= x*(a/b);
        }
    }

      算ax+by=c的解

    int exgcd(int a,int b,int &x,int &y)
    {
        if(b==0)
        {
            x=1;
            y=0;
            return a;
        }
        int r=exgcd(b,a%b,x,y);
        int t=x;
        x=y;
        y=t-a/b*y;
        return r;
    }
    
    bool linear_equation(int a,int b,int c,int &x,int &y)
    {
        int d=exgcd(a,b,x,y);
        if(c%d)
            return false;
        int k=c/d;
        x*=k; y*=k;    //求得的只是其中一组解
        return true;
    }
    ll e_gcd(ll a,ll b,ll &x,ll &y)  {
        if(b==0)
        {
            x=1;
            y=0;
            return a;
        }
        ll ans=e_gcd(b,a%b,x,y);
        ll temp=x;
        x=y;
        y=temp-a/b*y;
        return ans;
    }

         证明参考博客:http://blog.csdn.net/acmore_xiong/article/details/47694909

  • 相关阅读:
    loj10008家庭作业
    loj10006数列分段
    loj10005数列极差
    loj10004智力大冲浪
    codevs 1996 矿场搭建
    11.3 上午考试
    11.2 晚上考试
    11.2 下午考试
    11.2 上午考试
    11.1 下午考试
  • 原文地址:https://www.cnblogs.com/gggyt/p/7795107.html
Copyright © 2011-2022 走看看