扩展欧几里得算法的非递归实现的证明

在阅读《密码学与网络安全》遇到扩展的欧几里得算法,一直不太明白它的非递归算法(迭代)的有效性在哪里。
于是就去网上看一些证明,递归算法的证明蛮多,而且都比较好懂。非递归算法的证明倒是很少。
参考至 http://blog.csdn.NET/yoer77/article/details/69568676
这个博客非常齐全,但是非递归的证明我还是看了两三个小时才看懂,因此就结合自己的理解,自己写了一份个人认为比较清晰的证明:
解 s * a + t * b = gcd(a,b)
初始化: r1 = a , r2 = b , s1 = 1, s2 = 0, t1 = 0, t2 = 1.
循环过程:
while(r2 > 0)  
{  
       q = r1 / r2;  
  
       r = r1 - q * r2; //也就是r = r1%r2;  
       r1 = r2;  
       r2 = r;  
  
      s = s1 - q * s2;  
      s1 = s2;  
      s2 = s;  
        
      t = t1 - q * t2;  
      t1 = t2;  
      t2 = t;   
}  
gcd(a,b) = r1;   
s = s1;   
t = t1;  

附上自己手写证明过程的扫描版:

扩展欧几里得算法的非递归实现的证明_第1张图片

由最初的2个条件一直推出更新的s和t,而且推出的过程中一直保证s * a + t * b = r 成立,当r = gcd(a,b)的时候,就变成我们要解的方程了,
这个时候的s和t值就是该方程的解

你可能感兴趣的:(算法)