对拓展欧几里得算法的一点理解

首先需要明确的一点是:这是一种算法,而非一个证明题。

算法的需求与数学证明题是不一样的,数学证明题要求严谨完整,而算法只需要证明我用到的某个的性质成立即可,相当于是“恰好发现了这一点”。

于是对于拓展欧几里得,我们是从欧几里得算法中发现了一个递推的性质,从而受到启发,产生猜想:可不可以利用递推求出二元一次方程的解?

我们把猜想建立在欧几里得算法之上,利用该算法的递推过程,贯穿该过程来得到想要解决问题的答案。

也就是说,我们仅仅需要证明我们得到的答案是正确的,而并非深刻挖掘欧几里得算法的过程。

拓展欧几里得算法及证明如下:

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的方程的根带入递推式回归到原方程,得到原方程的根。

猜你喜欢

转载自www.cnblogs.com/AppleC/p/11332872.html