前面我们说过,gcd(a,b)可以表示为a和b的最小的正线性组合。现在我们就要求这个最小的正线性组合ax+by中的x和y。这个可以利用我们的Euclid算法。
从最简单的情况开始。当b=0时,我们取x=1,y=0。当b≠0时呢?
假设gcd(a,b)=d,则gcd(b,a mod b)=d。若我们已经求出了gcd(b,a mod b)的线性组合表示bx'+(a mod b)y',则
gcd(a,b)=d
=bx'+(a mod b)y'
=bx'+(a-[a/b]b)y'
=ay'+b(x'-[a/b]y')
那么,x=y',y=x'-[a/b]y'。这样就可以在Euclid的递归过程中求出x和y。
总结:首先是做法吧,递归到最底层之后,每次返还的都是该层的x,y值,但是返还的过程中,下一层回到本层的x,y委曲求全地充当本层x',y';依次类推层层递归会到第一层。
其次说说思想,之所以可以递归是因为本层要求的数据可以用下一层的数据表达,形成了递推式。