欧几里得算法:
\[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)的值
}