zoukankan      html  css  js  c++  java
  • Gcd&Exgcd

    欧几里得算法:

    [gcd(a,b)=gcd(b,amod b) ]

    证明:

    显然(大雾)

    扩展欧几里得及证明:

    为解决一个形如

    [ax+by=c ]

    的方程。

    根据裴蜀定理,当且仅当

    [gcd(a,b)|c ]

    时方程有解。

    然后解这个方程。。。

    我觉得大概就是:

    我们设

    [ax_1+by_1=gcd(a,b) ]

    [bx_2+(amod b) y_2=gcd(b,amod b) ]

    根据欧几里得以及(amod b=a-lfloor a/b floor)

    [ax_1+by_1=bx_2+(a-lfloor a/b floor)y_2 ]

    [ax_1+by_1=ay_2+bx_2-lfloor a/b floor y_2 ]

    根据恒等定理 (?)得:

    [x1=y2,y1=x2-lfloor frac{a}{b} floor *y2 ]

    然后我们知道,(gcd(a,b)|c)

    那么我们算出(ax+by=gcd(a,b))的答案来之后,只要把他乘上(c/gcd(a,b))就好啦。

    反正我知道代码哼唧

    Code

    
    void exgcd(int a, int b, int &x, int &y)
    {
        if(b == 0)
        {
            x = 1;y = 0;
            return;
        }
        exgcd(b,a%b,y,x);
        y-=a/b*x;
    	//计算ax+by=gcd(a,b)的值
    }
    
    
  • 相关阅读:
    杭电1176解答免费馅饼
    Locust 关联
    Locust 参数化
    Locust 介绍篇
    Locust 集合点
    Locust 其他协议
    团队项目需求分析报告
    第一次个人编程作业
    团队项目选题报告
    第一次软工作业
  • 原文地址:https://www.cnblogs.com/oierwyh/p/11375115.html
Copyright © 2011-2022 走看看