欧几里得算法

背景知识:

欧几里得算法:又叫做辗转相除法,用来求两个数的最大公约数。通过辗转相除,当余数为0的时候,最后的除数就是两个数的最大公约数。

例如:求20和11的最大公约数

每次将除数作为下一个式子的被除数,将余数作为下一个式子的除数

20➗11=1......9

11➗9=1......2

9➗2=4......1

2➗1=2......0

所以最大公约数为最后一个式子的除数1,即gcd(20,11)=1

扩展欧几里得算法与逆元

扩展欧几里得算法结论:对整数 a 与 b来说, 必存在整数 x 与 y 使得

                                                   ax + by = gcd(a,b)

        注:具体证明此处不做展开

 逆元定义:ax = 1(mod p),此时a与x互为逆元

例如a = 4,p = 11,由于4*3=12,12 mod 11 = 1,a=4在模11条件下的逆元为x=3。

为什么扩展欧几里得算法可以求解逆元:

        由逆元定义可知满足ax%p=1,因此a与b互为逆元时,加上k倍的p也不影响,毕竟kp对p取余之后为0,所以可以将求逆元的过程转换成:ax+kp=1,此时a与p已知,这就成功转化成扩展欧几里得算法求解的形式,我们可以求出x和k,x即为a对应的逆元。

对于复杂式子我们不能直接看出对应的逆元,具体操作步骤如下所示。

例如:求11在(mod20)条件下的逆元

上个例子中求得:gcd(20,11)=1

代入扩展欧几里得式子:

11x+20y=1

具体求解方法如下所示(类似于欧几里得算法求解过程):

20=11*1+9                               ----------①

11=9*1+2                                 ----------②

9=2*4+1                                  ----------③

写成上述的形式是类似于计算机求解过程,因此下面的移向操作并不是多此一举。

由式子①,②(移项)可得:

20-11*1=9                                  ----------④

11-9*1=2                                    ----------⑤

④带入⑤(目的是消去9,当求解过程中有很多式子时,就是这样一步步消去中间项)

11-(20-11*1)*1=2                   ----------⑥

再将④和⑥代入③消去中间值9和2,可得:

20-11*1=(11-(20-11*1)*1)*4+1

合并同类项可得:

5*20-9*11=1

也就解除了最开始的式子11x+20y=1,得到x=-9,y=5

总结:对式子ax = 1(mod p)我们已知a和p,先求p=a*x1+p1(此时的p1实际上时p与a运算的余数),然后将p=a,a=p1代入式子不断进行迭代,直到计算出余数为1时,pi=a*xi+1,就可以不断移向消去中间项,最后计算出对应的逆元。

乘法密码

答疑:

图中是以英文字母为例,假设26个字母对应数字0-25

1.为什么k要与26互素

因为互素的条件下才能将0-25与k运算之后均匀的映射到每一个位置,否则肯定会有重叠的部分。

2.怎么求k的逆元

由于k与26互素,所以gcd(k,26)=1.

已知k和p=26,利用扩展欧几里得算法:kx+py=1可求得x,y,此时x即为对应的逆元。

扩展欧几里得算法求逆元---乘法密码相关推荐

  1. 扩展欧几里得算法求逆元_从辗转相除法到求逆元,数论算法初体验

    今天是算法和数据结构专题的第22篇文章,我们一起来聊聊辗转相除法. 辗转相除法又名欧几里得算法,是求最大公约数的一种算法,英文缩写是gcd.所以如果你在大牛的代码或者是书上看到gcd,要注意,这不是某 ...

  2. 扩展欧几里得算法求逆元c语言,关于扩展欧几里得算法和逆元

    关于扩展欧几里得算法和逆元 1.扩欧 a*x1+b*y1=gcd(a,b); b*x2+(a%b)*y2=gcd(b, (a%b))= gcd(a,b); a%b=a-(a/b)*b; 联立可得 x1 ...

  3. 扩展欧几里得算法-求逆

    扩展欧几里得算法介绍

  4. 拓展 欧几里得算法 求逆元_ECC椭圆曲线加密算法:有限域和离散对数

    Hi all,我来翻译第二篇啦.若大家发现那些翻译的不够准确还望指出,不胜感激.首先放上原文链接: http://andrea.corbellini.name/2015/05/23/elliptic- ...

  5. 表格法轻松理解扩展欧几里得算法以及利用其求乘法逆元

    文章目录 扩展欧几里得算法 求乘法逆元 扩展欧几里得算法 具体算法的原理参见扩展欧几里得算法求乘法逆元,本文仅以表格的形式展现计算过程,浅显易懂.下面通过例子进行说明. 例:求1234和4321的最大 ...

  6. c语言中欧几里得模乘法逆元,扩展欧几里得算法同余方程模m乘法逆元详解

    欧几里德算法: 复习:求最大公约数算法(欧几里得算法.也叫辗转相除法).欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd ...

  7. 扩展欧几里得算法、乘法逆元与中国剩余定理

    文章目录 前言 定义.定理和部分证明 整除 定义 定理 定理的证明 同余 定义 同余的性质 同余的运算律 运算律的证明 扩展欧几里得算法 代码模板 算法详解 乘法逆元 求解逆元 乘法逆元的作用 中国剩 ...

  8. 欧几里得扩展欧几里得算法及相关的数学证明

    //欧几里得算法求最大公约数 int gcd(int m,int n) {int u0=m,u1=n,t;if( u0<u1 )// 保证u0>=u1u0^=u1,u1^=u0,u0^=u ...

  9. 欧几里得扩展欧几里得算法

    #朴素的欧几里得算法大家应该知道 g c d ( a , b ) gcd(a,b) gcd(a,b)表示a,b的最大公约数 朴素的欧几里得算法其实就是所谓的辗转相除法 辗转相除法 g c d ( a ...

最新文章

  1. Django 分页和使用Ajax5.3
  2. 解决RecycleView 嵌套 RecycleView 显示不全的问题
  3. 3种方式限制ip访问Oracle数据库
  4. Android环绕地球动画,手机也能带你进入360°全景立体影音世界?---杜比全景声体验全接触...
  5. python垃圾回收机制gcgo_python垃圾处理机制
  6. 【备忘录】UTM坐标系与经纬度转换 MATLAB C语言
  7. C#-概念-类库:类库
  8. ”骇客“不可缺少的电脑软件
  9. 或许再过两年,ASML将可以自由给中国供应EUV光刻机
  10. Axure 8授权码
  11. android中涉及的字体修改
  12. java 进程 线程数量_如何查询一个进程下面的线程数(进程和线程区别)
  13. Java程序应用实例:“你好 Java”
  14. 最近整理的乱七八糟的东东
  15. HGame 2023 Week3 部分Writeup
  16. MSAA,SSAA,CSAA,CFAA...如何正确地为您的游戏设置抗锯齿模式
  17. 微软SQL Server2012增长对Hadoop的支撑
  18. 算法分析-C语言描述
  19. Spring Boot配置定时任务
  20. SVG 入门指南(初学者入门必备)

热门文章

  1. 手把手教你使用 EndNote X9
  2. Java EE 期末复习提纲【太原理工大学】
  3. 电子产品21个权威认证
  4. 【硬核】超强八位半开源万用表
  5. 3dMax 骨骼动画导入到Unity
  6. 基于JAVA罪犯信息管理系统计算机毕业设计源码+系统+数据库+lw文档+部署
  7. 使用windows电脑做IOS自动化测试
  8. mstsc.js远程桌面NODE_RDP_PROTOCOL_X224_NEG_FAILURE错误
  9. 使用Python对FPS游戏读写操作
  10. 高压功率放大器ATA-4052在径向驻波型超声波电机研究中的应用