如何利用扩展欧几里得算法求解不定方程_欧几里德算法、拓展欧几里德、中国剩余定理...

b374967b8c9d86db6e36402fc57cd421.png

01.欧几里德算法(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

02.拓展欧几里德算法

算法原理:若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 + 348

435 = 348×1 + 87

348 = 87 × 4

∴ 87 = 435 – 348

87 = 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 + 11

15 = 11×1 + 4

11 = 4 × 2 + 3

4 = 1 × 3 + 1

3 = 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

求解同余方程组 继续往下看中国剩余定理

03.中国剩余定理

在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二(除以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 方程组:

2a3b9dc75092b1bcdf4dfa515f3f5bde.png

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

a0a868f399de18e42d6cba19d4e69ca1.png

公式如下:

48b1491e2222628d74f282809f842e79.png

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

04.作业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)

05.作业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)

— THE END —

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 先删后增 更新_MySQL 高级操作——新增数据、更新数据、删除数据、查询数据...

新增数据多数据插入只要写一次insert指令,但是可以插入多条记录语法:insert into 表名 [(字段列表)] values (值列表1),(值列表2),(值列表3);主键冲突主键冲突,在有的表中,使用的是业务主键(字段有业务含义),但是往往在…

python七段数码管倒计时_python实现七段数码管和倒计时效果

8是典型的七段数码管的例子,因为刚好七段都有经过,这里我写的代码是从1开始右转。这是看Mooc视频写的一个关于用七段数码管显示当前时间# -*-coding:utf-8 -*-import turtle as timport timedef drawGap():t.penup()t.fd(5)def drawLine(draw):drawGap()…

rda分析怎么做_数量生态学笔记||冗余分析(RDA)

上一节数量生态学笔记||冗余分析(RDA)概述中,我们回顾了RDA的计算过程,不管这个过程我们有没有理解透彻,我希望你能知道的是:RDA是响应变量矩阵与解释变量之间多元多重线性回归的拟合值矩阵的PCA分析。本节我们就是具体来看一个RD…

mysql 服务器管理员_mysql 查看数据库管理员

mysql 查看数据库管理员云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备,让您像使用水、电、天然气等公共资源一样…

python中有哪些重要的书写规则_一文读懂Python代码的书写规范

Python代码的书写规范1. 一致性的建议打破一条既定规则的两个好理由当应用这个规则将导致代码可读性下降,即使对于某人来说他已经习惯于按照这条规则来阅读代码了为了和周围的代码保持一致而打破规则(也许是历史原因)2. 代码的布局缩进4个空格代码行行最大长度 : 79字符推荐长度…

java输入行数打印菱形_JAVA题,输入行数,输入列数,输出一个菱形

展开全部1,冒泡排序1. /**2. * JAVA排序算法实现代码-冒泡(Bubble Sort)排序。3. *4. *5. *6. */7. public class Test {8. public static void main(String[] args) {9. int[] a ;10.11. System.out.print("排序前: ");12.13. for (int i 0; i < a.length; i)1…

openshift 3 mysql_最新OpenShift免费空间申请与使用教程-1G内存1G空间支持PHP和MysqL

一、OpenShift空间申请使用前必备工具1、OpenShift官网&#xff1a;1、官方网站&#xff1a;https://www.openshift.com/2、OpenShift V3&#xff1a;https://manage.openshift.com/2、Github账号(或者其他的git仓库也可以..)。注册git仓库是为了方便的实现代码的同步&#xff…

cpython教程_python高性能扩展工具-cython教程1快速入门

Cython不仅仅是一种编程语言。它的起源可以追溯到SAGE数学软件包&#xff0c;它用于提高数学计算性能&#xff0c;例如涉及矩阵的计算。更一般地说&#xff0c;我倾向于将Cython视为SWIG的替代品&#xff0c;为本机代码生成非常好的Python绑定。SWIG是最早和最好之一&#xff0…

golang mysql封装_golang如何封装路由

封装方式一、路由写在 main函数中&#xff0c;数据库初始连接放在 init() 函数中。、首先看 main.go一个初始化函数&#xff0c;初始化 dbfunc init() {db.Connect()}第二&#xff0c;路由func main() {// Configurerouter : gin.Default()// Set html render optionshtmlRende…

java socket编程客户端_Java Socket编程 - 基于Socket实现HTTP下载客户端

没有借助任何第三方库&#xff0c;完全基于JAVA Socket实现一个最小化的HTTP文件下载客户端。完整的演示如何通过Socket实现下载文件的HTTP请求(request header)发送如何从Socket中接受HTTP响应(Response header, Response body)报文并解析与保存文件内容。如何通过SwingWork实…

java相遇问题_行程问题

行程问题 《行程问题》说课设计——现代教育信息技术与数学学科的整合福建省闽侯县尚干中心小学 林惠贞 邮编&#xff1a;350112 邮箱:zhenzi2277163.com众所周知,未来的教育&#xff0c;倡导开放式学习&#xff0c;把学习的地点扩展到社会、网络&…

java写一个99到0_Java中一个普通的循环为何从10开始到99连续相乘会得到0?

【套装4本】java编程思想4第4版402.5元包邮(需用券)去购买 >这是一块非常简单的Java代码片段&#xff1a;public class HelloWorld{public static void main(String []args){int product 1;for (int i 10; i < 99; i) {product * i;}System.out.println(product);}}为什…

neo4j java查找_Spring-Boot使用neo4j-java-driver-- 查找两个节点之间关系的最短路径

一、Cypher数据create (小北:朋友圈{姓名:"小北", 喜欢的书类:"Poetry"}),(小菲:朋友圈{姓名:"小菲", 喜欢的书类:"Science Fiction"}),(小鹏:朋友圈{姓名:"小鹏", 喜欢的书类:"Music"}),(小颖:朋友圈{姓名:"…

继承易错总结

1.继承会将所有的成员继承下来&#xff0c;但是继承方式限定的是继承下来成员的可见类型(如果是private继承&#xff0c;那么他不论哪里都是不可见的&#xff1b;如果是protected继承在类中是可见的&#xff0c;在类外是不可见的&#xff1b;如果是public继承&#xff0c;在任何…

hhkb适合写java吗_起底这届HHKB最强新品键盘,究竟好在哪儿?

2019年12月HHKB上市了3大品类的12款新品键盘&#xff0c;今天为大家分享外设天下为HHKB Professional HYBIRD Type-S 双模静音旗舰版静电容键盘做的评测&#xff0c;起底这届HHKB新品的最强新品。近日&#xff0c;HHKB更新了旗下的在售产品系列&#xff0c;为了满足严肃、安静办…

elementui树形复选框,element-ui checkbox 组件的树形联动

前言示例版本为 Element-ui 2.13.0 Vue 2.6.11最近想弄 Element-ui checkbox 的多级联动&#xff0c;网上相关的例子大多数为二级联动&#xff0c;自己研究了一下&#xff0c;弄了一个树形菜单的多级联动&#xff0c;常用于角色管理等业务。(仅供参考&#xff0c;未考虑性能问…

java 先入先出,java_阻塞队列(FIFO先进先出)

java_阻塞队列(FIFO先进先出)ArrayBlockingQueue&#xff1a;由数组结构组成的有界阻塞队列&#xff1b;LinkedBlockingQueue&#xff1a;由链表结构组成的有界阻塞队列(但大小默认值为&#xff1a;Integer.MAX_VALUE)&#xff1b;PriorityBlockingQueue&#xff1a;支持优先级…

php 复选框全选和取消,基于JavaScript实现复选框的全选和取消全选

这篇文章主要为大家详细介绍了基于JavaScript实现复选框的全选和取消全选&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下本文实例为大家分享了js复选框的全选和取消全选的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下效果图&#xff1a;…

javascript date php date,JavaScript Date 知识浅析

Date函数new Date()Date 对象会自动把当前日期和时间保存为其初始值。date.getDate()从 Date 对象返回一个月中的某一天 (1 ~ 31)。date.getDay()从 Date 对象返回一周中的某一天 (0 ~ 6)。周日是0。date.getMonth()从 Date 对象返回月份 (0 ~ 11)。date.getFullYear()从 Date …

16字节 oracle md5,Oracle中的MD5加密

因为要用到MD5加密&#xff0c;所以在网上搜了一下相关资料&#xff0c;并进行仔细研究。其核心就是MD5编码的数据包函数&#xff1a;DBMS_OBFUSCATION_TOOLKIT.M因为要用到MD5加密&#xff0c;所以在网上搜了一下相关资料&#xff0c;并进行仔细研究。其核心就是MD5编码的数据…