目录

  • 欧几里德算法(Euclidean algorithm)(辗转相除法)
  • 拓展欧几里德算法
  • 中国剩余定理
    • 作业1:
    • 作业2:

欧几里德算法(Euclidean algorithm)(辗转相除法)

欧几里德算法又称辗转相除法,主要是用于计算两个整数a,b的最大公约数。

简单点说一下算法原理:两个整数的最大公约数等于其中小的那个数跟大除以小余数的最大公约数。
即: gcd(a,b)=gcd(b,a mod b) 。

举个简单的例子:
比如求 10跟 24 的最大公约数a = gcd(10, 24):

  1. 求10和24的最大公约数等于求10跟4的最大公约数 :
    a = gcd(10, 24) = gcd(10, 4)
  2. 求10跟4的最大公约数等于求4跟2的最大公约数,为2 :
    a = gcd(10, 24) = gcd(10, 4) = gcd(4, 2) = 2
# python
def gcd(a, b):return a if b == 0 else gcd(b, a % b)
print(gcd(10,24)) # 2

拓展欧几里德算法

算法原理:若a和b为正整数,则存在整数x, y 使得gcd(a,b)=ax+by;
通俗点说就是 gcd(a,b)可以表示为a,b的整数线性组合。

举个简单的例子:
gcd(10, 24) = 2
2 = 10*(-7) + 24*3

主要应用有以下三方面:

  1. 求解不定方程;
    例题:求 435x + 783y = 87 的一组整数解:

    先通过欧几里得算法得:

     783 = 1× 435 + 348435 = 348×1 + 87348 = 87 × 4 + 0∴ 87 = 435 – 34887 = 435 – (783 – 435)87 = (–1)(783) + 2(435)∴ x = 2, y = −1是此不定方程的一组整数解。
    
  2. 求解模的逆元(乘法逆元),参考上一篇同余方程、欧拉函数、乘法逆元、定义在Zm上的矩阵求逆;

  3. 求解模线性方程(线性同余方程);

    1. 求解同余方程 ax ≡ b (mod m), x = ?
      举个极端代表性的例子: 15x = 1 mod 26
      这道题转化成15x - 26y = 1 既可以当做1求解不定方程 ,也可以当做2求乘法逆元

       解法如下:26 = 1× 15 + 1115 = 11×1 + 411 = 4 × 2 + 34 = 1 × 3 + 13 = 1 × 3 ∴ 1 = 4 – 3= 4 – (11 – 4×2)= 4×3 – 11= (15-11) ×3 - 11= 15×3 - 11×4= (26-11)×3 - 11 ×4= 26×3 - (26 - 15)×7=26×(-4) + 15×7∴ x = 7, y = −4 为此不定方程的一组整数解,15关于模26的乘法逆元为7
      
    2. 求解同余方程组 继续往下看中国剩余定理

中国剩余定理

在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二(除以3 余2),
五五数之剩三(除以5 余3),七七数之剩二(除以7 余2),问物几何?”

宋朝数学家秦九韶于1247年《数书九章》卷一、二《大衍类》对“物不知数”问题做出了完整系统的解答。明朝数学家程大位将解法编成易于上口的《孙子歌诀》:

三人同行七十稀,
五树梅花廿一支,
七子团圆正半月,
除百零五便得知。

意思是只要是除以3余了一个1,就加上一个70;
只要是除以5余了一个1,就加上一个21;
只要是除以7余了一个1,就加上一个15。然后累加。
最后计算这个总和除以105的余数。
也就是 (2×70 + 3×21 + 15×2 ) mod 105 = 23

解法如下:

先从3和5、3和7、5和7的公倍数中相应地找出分别被7、5、3除均余1的较小数15、21、70 ( 此步又称为求"模逆"运算,参考乘法逆元解法)。即:
15÷7=2……余1,
21÷5=4……余1,
70÷3=23……余1.
再用找到的三个较小数分别乘以所要求的数被7、5、3除所得的余数的积连加,
15×2+21×3+70×2=233.
最后用和233除以3、5、7三个除数的最小公倍数.
233÷105=2……余23,
这个余数23就是合乎条件的最小数.

拓展到一般情况:
假设整数m1, m2, … , mn两两互质,则对任意的整数:a1, a2, … , an 方程组:

都存在整数解,且若X , Y 都满足该方程组,则必有 X ≡ Y (mod N) 其中:

公式如下:

课本上的公式符号实在不想看,就拿作业来举两个例子吧。

作业1:

求解同余方程组:
x ≡ 12 (mod 25)
x ≡ 9 (mod 26)
x ≡ 23 (mod 27)

以上方程组等价于 x = 25a + 12 = 26b + 9 = 27c + 23
移一下项 得:
① : 25a - 27c = 23-12 = 11
②: 26b - 25a = 12-9 = 3

首先对①式运用拓展欧几里得:

27 = 25×1 + 2
25 = 2×7 + 11
则:
11 = 25 - 2×7= 25 - (27-25) ×7= 25×8 - 27×7
所以a=8, c=7
代入x = 25a + 12  = 27c + 23 得:
x = 212

得到合并方程 x = 212 + 25 × 27t 即:x ≡ 212 (mod 675)
然后再跟x ≡ 9 (mod 26) 合并

x = 212 + 675t = 26b + 9
26b - 675t = 203
675 = 26×25+25
25 = 25×1
所以:
203 = (26-25)×203= (26 - (675-26*25))×203=  26×5278 - 675×203
b=5278 , t=203
代入得x = 137237

得到合并方程 x = 137237 + 25 × 27×26t 即:x ≡ 137237 (mod 17550) , x=14387
x = 14387 + 17550n (n∈Z)

作业2:

求解如下同余方程组:
13x ≡ 4 (mod 99)
15x ≡ 56 (mod 101)

这类同余方程组带着系数让人头大,但是也不妨碍使用拓展欧几里德,
首先去掉系数:
x ≡ 46 (mod 99)
x ≡ 98 (mod 101)

求解方法很多,这里列举利用二元一次不定方程方法:
13x ≡ 4 (mod 99) 转化为 13x-99y = 4
然后用拓展欧几里德:
13×46-99×6 = 4
x=46, y=6
所以不定方程13x-99y = 4 的所有解为
x=46 + 99t
y=6+13t
所以原同余方程解为:x ≡ 46 (mod 99)

消去x得: 99a - 101b = 52
拓展欧几里德走你:x = 7471 (mod 9999)
x = 9999 n + 7471 (n ∈ Z)

欧几里德算法、拓展欧几里德、中国剩余定理相关推荐

  1. 欧几里德算法+拓展欧几里德算法

    欧几里德算法一般简写为GCD,即辗转相除求最大公因数,模板为 ll gcd(ll a,ll b) {return b==0?a:gcd(b,a%b); } 由于这种求的方法适用于大数,所以一般数据类型 ...

  2. CF338D GCD Table(拓展中国剩余定理,细节处理,2900分)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 CF338D GCD Table(拓展中国剩余定理,细节处理,2900分) Problem 有一张 n ...

  3. 密码学基础算法(二)中国剩余定理

    随便谷歌了一个图片做首图 原图地址: http://www.siwapu.com/etagid41968b0/ 密码学基础系列: (一) 基于整数的欧几里得算法和扩展欧几里得算法 (二) 中国剩余定理 ...

  4. ACM数论----中国剩余定理与拓展中国剩余定理

    一.问题引入: 在<孙子算经>中有这样一个问题:"今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?"这个问 ...

  5. 中国剩余定理拓展中国剩余定理

    复习 中国剩余定理: x ≡ a 1 ( m o d m 1 ) x ≡a_1(mod m_1) x≡a1​(modm1​) x ≡ a 2 ( m o d m 2 ) x ≡a_2(mod m_2) ...

  6. 中国剩余定理学习 拓展中国剩余定理

    中国剩余定理学习 && 拓展中国剩余定理 中国剩余定理: 拓展中国剩余定理: 中国剩余定理: 仅供自己复习时查看一下大佬笔记,详细学习过程在大佬的博客. 学习连接:https://ww ...

  7. 密码学基础——辗转相除法,费马小定理,欧拉定理,裴蜀定理,中国剩余定理

    文章主要根据百度百科和维基百科相关相关知识点整理而成! 辗转相除法 辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法.它的具体做法是:用较小数除较大数 ...

  8. 挑战程序竞赛系列(41):4.1中国剩余定理

    挑战程序竞赛系列(41):4.1中国剩余定理 详细代码可以fork下Github上leetcode项目,不定期更新. 练习题如下: POJ 1006: Biorhythms POJ 2891: Str ...

  9. 初等数论--同余方程--同余方程组:中国剩余定理

    初等数论--同余方程--同余方程组:中国剩余定理 博主是初学初等数论(整除+同余+原根),本意是想整理一些较难理解的定理.算法,加深记忆也方便日后查找:如果有错,欢迎指正. 我整理成一个系列:初等数论 ...

  10. 数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法

    打死没想到会在H老师处学懂数论 同余,整除 模运算 埃式筛法 欧拉筛法 最大公约数和最小公倍数 辗转相除法 更相减损术 裴蜀定理 威尔逊定理 费马定理 同余等价类.剩余系.缩系 欧拉函数 欧拉定理 扩 ...

最新文章

  1. java 线程的创建和执行_线程管理(一)线程的创建和运行
  2. UML和模式应用(1):面向对象的分析与设计
  3. 微信小程序 提示Toast
  4. mysql分库分表方案浅析
  5. 查看安装软件/Select-object/Where-Object xxx -like
  6. Android之Activity **** has leaked window android.widget.PopupWindow$PopupDecorView that was originall
  7. array_reverse_PHP array_reverse()函数与示例
  8. mysql 无符号 负数_mysql下有符号数和无符号数的相关问题
  9. 設置Linux保留物理內存並使用 (1)
  10. vue 使用axios 出现跨域请求的两种解决方法
  11. HT for Web列表和3D拓扑组件的拖拽应用
  12. ubuntu 11.10英文界面下中文字体显示楷体的问题
  13. oracle12C以上版本创建pdb数据库实例实践
  14. cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client libr....
  15. MATLAB 的 colormap 函数详解
  16. 【王道】操作系统OS第二章进程管理(二[1])
  17. Gate用户手册(二)怎样运行Gate以及可视化
  18. gallery3d的源码分析——入口
  19. 聊一聊清华读博的焦虑与成长
  20. Learning to Collaborate: Multi-Scenario Ranking via Multi-Agent Reinforcement Learning

热门文章

  1. XJOI_3541_开根号
  2. Excel公式:用COUNTIF、COUNTIFS函数进行排序和查重,用LOOKUP函数对无序表进行精确查询
  3. 团队作业-Beta冲刺(3)
  4. MarkdownPad 2 使用手册
  5. MarkdownPad的livepreview预览无效,显示this view has crashed
  6. 用Java编写约分最简公式_一个有趣的算法问题:如何定义一个分数类
  7. 基于C51单片机的万年历设计(LCD1602显示)
  8. 牛客网C语言题目练习
  9. vscode怎样设置成中文
  10. 解决CENTOS下There are no enabled repos.的问题