在阅读《密码学与网络安全》遇到扩展的欧几里得算法,一直不太明白它的非递归算法(迭代)的有效性在哪里。
于是就去网上看一些证明,递归算法的证明蛮多,而且都比较好懂。非递归算法的证明倒是很少。
参考至 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;
【扩展欧几里得算法的非递归实现的证明】附上自己手写证明过程的扫描版:
![扩展欧几里得算法的非递归实现的证明](https://img.it610.com/image/info8/c58c7577679c48ca9056b0c109709ff0.jpg)
文章图片
由最初的2个条件一直推出更新的s和t,而且推出的过程中一直保证s * a + t * b = r 成立,当r = gcd(a,b)的时候,就变成我们要解的方程了,
这个时候的s和t值就是该方程的解
推荐阅读
- 人工智能|干货!人体姿态估计与运动预测
- 分析COMP122 The Caesar Cipher
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)
- C语言学习(bit)|16.C语言进阶——深度剖析数据在内存中的存储
- Python机器学习基础与进阶|Python机器学习--集成学习算法--XGBoost算法
- 数据结构与算法|【算法】力扣第 266场周赛
- 数据结构和算法|LeetCode 的正确使用方式
- leetcode|今天开始记录自己的力扣之路
- 人工智能|【机器学习】深度盘点(详细介绍 Python 中的 7 种交叉验证方法!)
- 网络|简单聊聊压缩网络