Gcd&Exgcd 学习笔记

笑着哭i 提交于 2019-11-27 20:32:03

欧几里得算法:

\[gcd(a,b)=gcd(b,a\bmod b)\]

证明:

显然(大雾)

扩展欧几里得及证明:

为解决一个形如

\[ax+by=c\]

的方程。

根据裴蜀定理,当且仅当

\[gcd(a,b)|c\]

时方程有解。

然后解这个方程。。。

我觉得大概就是:

我们设

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

\[bx_2+(a\bmod b) y_2=gcd(b,a\bmod b)\]

根据欧几里得以及\(a\bmod b=a-\lfloor a/b\rfloor\)

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

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

根据恒等定理 (?)得:

\[x1=y2,y1=x2-\lfloor \frac{a}{b} \rfloor *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)的值
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!