Exgcd نُشر في 2019-12-25 عُدل في 2020-01-24 Exgcd–扩展欧几里得算法 用来求一组(x,y)使(1)ax+by=gcd(a,b)我们不难发现(2)gcd(a,b)=gcd(b,amodb)(3)amodb=a−⌊ab⌋b 设一组(x1,y1)使得(4)bx1+(amodb)y1=gcd(b,amodb) 由上式可得(5)ax+by=bx1+(amodb)y1整理可得(6)ax+by=ay1+b(x1−⌊ab⌋y1)会发现一组特解(7){x=y1 y=x1−⌊ab⌋y1将x1,y1代回原方程可得(8){x1=y2 y1=x2−⌊ab⌋y2发现这是一个递归式 那么边界条件是什么呢? 显然当a=nb(n∈N+)时amodb=0即y=0 此时有(9)ax+0=gcd(a,0)因为gcd(a,0)=a 故此时我们得到一组解(10){x=1 y∈R将结果返回即可 代码如下 1234567891011121314int x,y;void Exgcd(int a,int b){ if(b==0) { x=1; y=0; return; } Exgcd(b,a%b); temp=x; x=y; y=temp-(a\b)y;}