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

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);主键冲突主键冲突,在有的表中,使用的是业务主键(字段有业务含义),但是往往在…

nltk和python的关系_NLTK学习笔记(一):语言处理和Python

目录nltk资料下载import nltknltk.download()其中,download() 参数默认是all,可以在脚本里面加上nltk.download(需要的资料库) 来进行下载文本和词汇首先,通过from nltk.book import * 引入需要的内置9本书搜索文本上下文:Text.concordance(monstrous) &…

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字符推荐长度…

二进制文件mysql创表_MySQL_MYSQL中如何存取二进制文件,首先创建测试表testtable CREATE TA - phpStudy...

MYSQL中如何存取二进制文件首先创建测试表testtableCREATE TABLE testtable ( id INT(5) NOT NULL AUTO_INCREMENT PRIMARY KEY,filename CHAR(255),data LONGBLOB );将文件存入表中mysql_connect( "localhost", "root", "password"); //连接数据…

树莓派 php mysql 中文_使用树莓派(raspberry pi)搭建网站(nginx+php+mysql+ddclient)

标签: 树莓派 raspberrypi php 网站 mysql分类: Linux技术最近在研究学习PHP,有时候想随时就学习,所以就决定搭建一个网站,随时可以进行学习,因为要24小时在线,要低功耗和安静,所以选…

mysql从库应用负载_线上MySQL数据库高负载的解决思路--再次论程序应用索引的重要性...

前言:过去的笔记整理而得,未免丢失,发布个人博客。[2012年的资料笔记]场景:数据库的负载飙升,CPU高达99%。查看进程。通过猜测推理,定位了一些select语句363478427 | apps_read | 192.168.1.113:48945 …

python获取方法的装饰方法_python中的方法和装饰器

[TOC]装饰器python中的装饰器(decorator)是在pep 318中被首次引入,它的本质是一个函数这个函数是接受其它参数为参数,并且用一个新的,修改后的函数作为替换,最常见的装饰器就classmethod和staticmethoddef happy(f):return lambda…

一帮一python_[python]L1-030 一帮一 (15分)

L1-030 一帮一 (15分)“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中&#xf…

java书面_Java程序猿的书面采访String3

public class SameString {//思想二:每个字符都相应着自己的ASC码,第一个思想的算法复杂度为O(nlogn)。一般能够利用空间来减少时间复杂度//能够开辟一个大小为256的数组空间,而且将256个数组元素都置为0,然后遍历第一个字符串把字…

java fangfa_daicanfangfa java中的方法 刚入门的分不清带参方法的作用和用处 这个可以详细的讲解如何使用带参方法 - 下载 - 搜珍网...

第14章 带参数的方法/01 教学演示示例/示例1:带一个参数的方法/StudentsBiz.java第14章 带参数的方法/01 教学演示示例/示例1:带一个参数的方法/TestAdd.java第14章 带参数的方法/01 教学演示示例/示例2:带多个参数的方法/StudentsBiz.java第…

java sqlite 工具类_Java 工具类 - JDBC通用操作基类 BaseDao

封装了增删改查功能适用于MySQL、Oracle、SQLServer、DB2、Sybase、JTDS、PostgreSql、SQLite、Derby、H2、HSQLDB、ODBC 等等数据库,有需要的还可以自己增加。package com.tgb.hz.jdbc;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import javax.namin…

java 跨域 下载文件_文件下载重命名(可跨域)

一、正常情况下,我们都如此下载文件并修改文件名,在a标签上面添加download属性var link document.createElement(a);link.href file.url;link.download file.name;link.target"_blank";link.click();由于a.download跨域会失效,上…

java hibernate 插入数据_[Java教程]hibernate 返回新插入数据的Id

[Java教程]hibernate 返回新插入数据的Id0 2015-08-28 10:00:11例如 表明 studentInfoString sql"set set nocount on studentInfo(列名,列名) values(值,值);select identity as inserId";java代码:public int executeCount(String sql, Map paramMap) {…

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…

mysql 密码大小写_MySQL数据库加密和解密~认证登陆密码(mysql.user)和MySQL不区分大小写...

MySQL数据库认证密码有两种方式:1&#xff1a;MySQL 4.1版本之前是MySQL323加密2&#xff1a;MySQL 4.1和之后的版本都是MySQLSHA1加密还有函数:AES_ENCRYPT()加密函数和AES_DECRYPT()解密函数和MD5()加密。MySQL数据库中自带old_password(str)和password(str)函数,前者是MySQL…

三星手机 java_如何在三星手机上安装Java ME应用程序?

我的手机应该可以运行&#xff1a;JavaTM&#xff1a;MIDP 2.0,基于CLDC 1.1的应用程序.但是,无论我尝试在其上安装哪个应用程序,我都会收到错误&#xff1a;已下载的JAR无效我已经尝试在Netbeans上构建Java ME项目,使用指定的MIDP 2.0和CLDC 1.1.这些应用程序很简单,使用Netbe…

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…