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