扩展欧几里德算法(附证明)
tags : acm 数论
完全没接触过数论的渣渣脑抽不想敲代码,便看看数论冷静一下.
扩展欧几里得算法在acm-icpc中是常用算法,主要用于在已知a,b的情况下求解一组x,y,使它们满足贝祖等式: ax+by=gcd(a,b)=d .
顾名思义,该算法是对欧几里得算法的拓展.其代码也是在gcd的基础上做小小的修改.
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;
}
证明:
(证明过程参考自百度百科)
原式: ax+by=gcd(a,b) (假设 a≥b )
当b=0时有 gcd(a,b)=a ,此时 x=1,y=0
当b不为0时,根据欧几里得定理 gcd(a,b)=gcd(b,amodb) 可得 ax+by=gcd(a,b)