【密码学|算法设计】拓展的欧几里得算法及理论证明 (Extended Euclidean Algorithm)
文章目录
- 前言
- 一、算法理论
- 1.1 算法
- 1.2 理解
- 1.3 证明
- 二、示例
前言
写给马上要考密码学的小伙伴
一、算法理论
1.1 算法
对于给定两个整数 a a a和 b b b,求其最大公因数 g c d ( a , b ) gcd(a,b) gcd(a,b)还要求其系数 s s s和 t t t满足以下公式:
g c d ( a , b ) = s ⋅ a + t ⋅ b gcd(a,b)=s·a+t ·b gcd(a,b)=s⋅a+t⋅b
在高等数学中,我们知道要求最大公因式 g c d ( f ( x ) , g ( x ) ) gcd(f(x),g(x)) gcd(f(x),g(x))可以连列以下等式:
{ f ( x ) = q 1 ( x ) g ( x ) + r 1 ( x ) g ( x ) = q 2 ( x ) r 1 ( x ) + r 2 ( x ) r 1 ( x ) = q 3 ( x ) r 2 ( x ) + r 3 ( x ) … … … r i − 2 ( x ) = q i ( x ) r i − 1 ( x ) + r i ( x ) … … … r s − 2 ( x ) = q s ( x ) r s − 1 ( x ) + r s ( x ) r s − 1 ( x ) = q s + 1 ( x ) r s ( x ) + 0 \left\{ \begin{aligned}{} f(x)&=q_{1}(x) g(x)+r_{1}(x) \\ g(x)&=q_{2}(x) r_{1}(x)+r_{2}(x) \\ r_{1}(x)&=q_{3}(x) r_{2}(x)+r_{3}(x) \\ &\ldots \ldots\ldots\\ r_{i-2}(x)&=q_{i}(x) r_{i-1}(x)+r_{i}(x) \\ &\ldots \ldots \ldots\\ r_{s-2}(x)&=q_{s}(x) r_{s-1}(x)+r_{s}(x)\\ r_{s-1}(x)&=q_{s+1}(x) r_{s}(x)+0\\ \end{aligned}\right. ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧f(x)g(x)r1(x)ri−2(x)rs−2(x)rs−1(x)=q1(x)g(x)+r1(x)=q2(x)r1(x)+r2(x)=q3(x)r2(x)+r3(x)………=qi(x)ri−1(x)+ri(x)………=qs(x)rs−1(x)+rs(x)=qs+1(x)rs(x)+0
且由此可以得到
( f ( x ) , g ( x ) ) = ( g ( x ) , r 1 ( x ) ) = ( r 1 ( x ) , r 2 ( x ) ) = . . . = ( r s − 1 ( x ) , r s ( x ) ) = r s ( x ) (f(x),g(x))=(g(x),r_1(x))=(r_1(x),r_2(x))=...=(r_{s-1}(x),r_s(x))=r_s(x) (f(x),g(x))=(g(x),r1(x))=(r1(x),r2(x))=...=(rs−1(x),rs(x))=rs(x)
如此回推就可以得到
r s ( x ) = u ( x ) f ( x ) + v ( x ) g ( x ) r_s(x)=u(x)f(x)+v(x)g(x) rs(x)=u(x)f(x)+v(x)g(x)
通过整理快速计算 u ( x ) u(x) u(x)和 v ( x ) v(x) v(x)的方法,得到了拓展的欧几里得算法:
首先,我们先设计以下形式的矩阵:
(对Katex调整表格格式不是很熟悉,用Latex做了表截图过来了)
对任意临近的三行 i i i, j j j, k k k等式将满足以下等式:
{ q j = ⌊ β i 1 / β j 1 ⌋ β k 1 = β i 1 − q j ⋅ β j 1 β k 2 = β i 2 − q j ⋅ β j 2 β k 3 = β i 3 − q j ⋅ β j 3 \left\{ \begin{aligned}{} q_j&=\lfloor \beta_{i1} / \beta_{j1}\rfloor \\ \beta_{k1}&=\beta_{i1}-q_j·\beta_{j1} \\ \beta_{k2}&=\beta_{i2}-q_j·\beta_{j2} \\ \beta_{k3}&=\beta_{i3}-q_j·\beta_{j3} \\ \end{aligned}\right. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧qjβk1βk2βk3=⌊βi1/βj1⌋=βi1−qj⋅βj1=βi2−qj⋅βj2=βi3−qj⋅βj3
该矩阵以 β s + 1 , 1 = 0 \beta_{s+1,1}=0 βs+1,1=0 结尾,且每一行的数据满足
{ β s + 1 , 1 = 0 β m 1 = β m 2 ⋅ a + β m 3 ⋅ b ∀ m ∈ [ 0 , s ] \left\{ \begin{aligned}{} \beta_{s+1,1}&=0 \\ \beta_{m1}&=\beta_{m2}·a+\beta_{m3}·b \quad \forall m \in [0,s] \end{aligned}\right. {βs+1,1βm1=0=βm2⋅a+βm3⋅b∀m∈[0,s]
1.2 理解
在扩展的欧几里得算法中的 q q q和我们刚才讲到的高等代数中的 q q q用法是一样的, β i 1 \beta_{i1} βi1的作用与 r i ( x ) r_i(x) ri(x)也是一样的,我们以最后 β s + 1 , 1 \beta_{s+1,1} βs+1,1举例,这时实际上满足了
β s − 1 , 1 = q s ⋅ β s 1 + β s + 1 , 1 = q s ⋅ β s 1 + 0 \beta_{s-1,1} =q_s· \beta_{s1}+\beta_{s+1,1}= q_s·\beta_{s1}+0 βs−1,1=qs⋅βs1+βs+1,1=qs⋅βs1+0
这与上文的
r s − 1 ( x ) = q s + 1 ( x ) r s ( x ) + 0 r_{s-1}(x)=q_{s+1}(x) r_{s}(x)+0 rs−1(x)=qs+1(x)rs(x)+0
是一致的,所以本质上拓展的欧几里得算法与我们熟悉的高等代数中的最大公因式的递推是一回事,接下来我们来探究以下等式:
β m 1 = β m 2 ⋅ a + β m 3 ⋅ b ∀ m ∈ [ 0 , s ] \beta_{m1}=\beta_{m2}·a+\beta_{m3}·b \quad \forall m \in [0,s] βm1=βm2⋅a+βm3⋅b∀m∈[0,s]
1.3 证明
可以发现在第0行和第1行,这个等式是显然成立的,那我们用递归法来考虑:
显然m=0和m=1时成立。
对于m>3,假设第 i i i行和第 j j j行满足等式,即
β i 1 = β i 2 ⋅ a + β i 3 ⋅ b β j 1 = β j 2 ⋅ a + β j 3 ⋅ b \beta_{i1}=\beta_{i2}·a+\beta_{i3}·b\\ \beta_{j1}=\beta_{j2}·a+\beta_{j3}·b βi1=βi2⋅a+βi3⋅bβj1=βj2⋅a+βj3⋅b
由 β k 1 \beta_{k1} βk1的定义和 β k 2 \beta_{k2} βk2, β k 3 \beta_{k3} βk3得到
得
β k 1 = β k 2 ⋅ a + β k 3 ⋅ b \beta_{k1}=\beta_{k2}·a+\beta_{k3}·b βk1=βk2⋅a+βk3⋅b
证毕
(对Katex怎么设置无花括号等号对齐不是很熟悉,在Latex上写完截图过来了)
二、示例
看一个例子:
求 g c d ( 321 , 843 ) gcd(321,843) gcd(321,843)
所以得到最大公因数是3,满足
3 = ( − 21 ) ∗ 321 + 8 ∗ 843 3=(-21)*321+8*843 3=(−21)∗321+8∗843
【密码学|算法设计】拓展的欧几里得算法及理论证明 (Extended Euclidean Algorithm)相关推荐
- Python:实现extended euclidean algorithm扩展欧几里得算法(附完整源码)
Python:实现extended euclidean algorithm扩展欧几里得算法 from __future__ import annotationsimport sysdef extend ...
- 算法初体验之欧几里得算法
通过本文希望能给程序设计的初学者一些启发. 本文重点讲述欧几里得算法,引出算法的三大前提,大概阐明算法的一些特点. 欧几里得算法(或辗转相除法)用于计算两个正整数的最大公约数,基本算法如下: E:设两 ...
- 算法题:SOJ1092: 欧几里得算法
一.BackGroud 在RSA密码体系中,欧几里得算法是加密或解密运算的重要组成部分.它的基本运算过程就是解 x*a=1(mod n) 这种方程. 二.The Problem 整个解的过程是这样的, ...
- 算法设计与分析-回溯法
单选题 关于回溯法以下叙述中不正确的是( ). A. 回溯法有"通用解题法"之称,它可以系统地搜索一个问题的所有解或任意解 B. 回溯法是一种既带系统性又带跳跃性的搜索算法 C. ...
- 算法设计与分析——回溯法——装载问题
0027算法笔记--[回溯法]回溯法与装载问题 自己写的代码: #include <iostream> using namespace std; template <class Ty ...
- 算法设计与分析——回溯法——批处理作业调度
问题描述:给定n个作业的集合{J1,J2,-,Jn}.每个作业必须先由机器1处理,然后由机器2处理.作业Ji需要机器j的处理时间为tji.对于一个确定的作业调度,设Fji是作业i在机器j上完成处理的时 ...
- 算法设计 之 递推法
2019独角兽企业重金招聘Python工程师标准>>> 递推法就是根据已知条件,分析推导出问题中的联系,然后一步一步进行推倒直至得到结果. 根据具体问题我们需要选择是正推还是逆推来解 ...
- 算法设计与分析——回溯法——圆排列问题
#include<iostream> #include<math.h> using namespace std; class Circle {public:float Cent ...
- 算法设计与分析——回溯法——旅行售货员问题
#include<iostream> #include<bits/stdc++.h> using namespace std; const int noEdge=65535; ...
最新文章
- 预告|第四届工业大数据创新竞赛决赛答辩倒计时
- vue js中报红_vue:我和node、webpack的情深似海
- 在app中从下向上滑动,以找到不在默认第一页的元素
- 如何将一键还原精灵备份文件复制出来?
- abap submit 的使用方法
- 航飞原始影像外方位元素_【技术】无人机倾斜摄影建模技术在虚拟现实中的应用...
- Spring MVC中的验证组
- PHP设计模式——策略模式
- Android之通过HttpURLConnection.getResponseCode状态码抛出异常的问题以及解决方法
- ASP.net发布项目引用了C++DLL后页面提示找不到指定模块的异常
- VNPY思维导图架构
- “我是技术总监,你干嘛总问我技术细节?”
- 人若不知足,永远不幸福
- 古墓丽影10linux,《古墓丽影:崛起》Linux 版上架 Steam
- win10浏览器加载很慢_解决Win10 Edge浏览器打开网页慢的问题
- 为什么有人会说「感谢拼多多」,让一贫如洗的我还能活下去?
- HDU 1560 DNA sequence(DNA序列)
- python绘制热图
- Mysql 查询数据库中哪个表的字段个数最多
- 因果推理(三):关联和因果在因果图中的流动
热门文章
- readlink /var/lib/docker/overlay2/l: invalid argument报错解决
- 49.现有移动端开源框架及其特点—MACE( Mobile AI Compute Engine)
- Qt调用Matlab库C#库dll调用C++调用C#库CSharp库lib invoke matlab library .net donet netframework
- imx6ull中断体系之GICV2
- 把移动和社交融入SaaS云服务
- 并查集算法 | Union-Find Algorithm
- Pointofix ,截屏神器,好用到飞的软件
- kubernetes二进制安装
- Oracle update语句用法
- html中<a>标签的安全问题