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

欧几里德算法是一种用于计算两个正整数最大公约数的有效方法。算法原理是通过反复除以余数,直至余数为0,最后的除数即为最大公约数。拓展欧几里德算法可用于解决不定方程、求解模的逆元以及模线性方程。在实际应用中,例如在求解同余方程组、寻找乘法逆元等方面有重要作用。通过举例和解析,展示了算法如何应用于具体问题的解决过程。
摘要由CSDN通过智能技术生成

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

# pythondef 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 – 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

 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 方程组:

67e8be33dc9b225ef0db54906c0c50b2.png

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

db6fd8267f721bb0c7fb8ff8b97488ac.png

公式如下:

5b59cca76e1d0ad38666c3e460c2ef97.png

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值