扩展欧几里得算法是干什么用的?
扩展欧几里得算法(又称扩充欧几里得算法)是用来解某一类特定的不定方程的。讲解清楚需要好些预备知识,各位读者不能着急。我是花了半天时间来理解它。
不定方程不定方程是以x,y为变量,形如ax+by=c,且a,b,x,y,c都为整数的一类方程。例如4x+5y=13,以不定方程来解,得x=-13, y=13。不定方程这个名词多见于小学中学,它还有个名词叫丢番图方程,这个名称似乎在学术界更为多见。
因子表示a是b的因子,b是a的倍数。
ax+by=c有整数解,当且仅当gcd(a,c)|c。详情见维基百科的贝祖定理条目。
例如,5x+14y=35有没有整数解呢?
贝祖定理告诉我们有!因为gcd(5,14)=1|35。
Mathematica告诉我们x=7, y=0。(你也可以手算。)

定理:若ax+by=g,(g=gcd(a,b),即g是a,b的最大公约数)有整数解;则ax+by=c(c是g的倍数)有整数解
。读者可以测试、证明一下。
设ExtendedGCD为扩展欧几里得算法,它接受两个整数a,b,返回两个整数x,y。
若有ax+by=gcd(a,b),则ExtendedGCD(a,b)可求x,y。
练习1现在练习一下,使用ExtendedGCD,求6x+10y=2的整数解。
发现gcd(6,10)=2,2是6和10的最大公约数,于是求6x+10y=2的整数解可以用扩展欧几里得算法求。
以Mathematica代码为例:

所以x=2, y=-1。6×2+10×-1=12-10=2。
练习2求9x+8y=2的整数解。
发现gcd(9,8)=1≠2,不能直接用扩展欧几里得算法。
根据上面所说的定理,先求9x+8y=gcd(9,8)的整数解。

所以9×1+8×-1=gcd(9,8)=1。
根据定理,ax+by=c有整数解,所以9x+8y=2有整数解
。
希望对读者有帮助。
本文依照3.0协议释出
作者爱让一切都对了