首先需要明确的一点是:这是一种算法,而非一个证明题。
算法的需求与数学证明题是不一样的,数学证明题要求严谨完整,而算法只需要证明我用到的某个的性质成立即可,相当于是“恰好发现了这一点”。
于是对于拓展欧几里得,我们是从欧几里得算法中发现了一个递推的性质,从而受到启发,产生猜想:可不可以利用递推求出二元一次方程的解?
我们把猜想建立在欧几里得算法之上,利用该算法的递推过程,贯穿该过程来得到想要解决问题的答案。
也就是说,我们仅仅需要证明我们得到的答案是正确的,而并非深刻挖掘欧几里得算法的过程。
拓展欧几里得算法及证明如下:
ax+by=gcd(a,b)
bx`+{a/b}by`=gcd(b,{a/b}b)
由于gcd(a,b)=gcd(b,{a/b}b),
得到ax+by=bx`+{a/b}by`
∵{a/b}=a/b-[a/b]
∴ax+by=bx`+(a/b-[a/b])by`
∴ax+by=bx`+(a-[a/b]b)y`
∴a(x-y`)=b(x`-y-[a/b]y`)
由于当x=y`,y=[a/b]y`-x`时该等式一定成立
//注意这里并不代表x=y`,y=[a/b]y`-x`是该等式的唯一解,而是我们取出了在实际情况中所需要的解
所以我们主观上取这一组解做我们的递归项
//因为这样可以解决我们的问题,可以求解方程
于是我们得到了这个递归公式
★那么说到底我们为什么会想到利用这个方法?
因为当b=0时这个方程的根是已知的x=c,y=任意值.
我们要通过辗转相除法求出与原方程有关联的一个满足b=0的方程。
这里的关联就是递推式,先递到底得到满足b=0的方程,
再把这个b=0的方程的根带入递推式回归到原方程,得到原方程的根。