如何利用擴展歐幾里得算法求解不定方程_歐幾里德算法、拓展歐幾里德、中國剩余定理...

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.pswp.cn/news/530903.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530903.shtml
英文地址,請注明出處:http://en.pswp.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…