整除
辗转相除法及其扩展算法
辗转相除法
题目:求解4864 和 3458 的最大公因数。
解答:利用的核心性质是:若a = bq+c ,q是一个整数,则有(a,b)=(b,c)
简单来说就是不断用
b
和b|a
的余数r
做带余除法。
4864 = 1 × 3458+1406, q1 = 1,r1= 1406
3458 = 2 × 1406+ 646, q2= 2,r2= 646
1406 = 2 × 646+114, q3 = 2,r3 = 114
646 = 5 × 114+76, q4 = 5,r4 = 76
114 = 1 × 76+38, q5 = 1,r5= 38
76 = 2 × 38 q6= 2,r6= 0
所以,最大公因数为:**38**
扩展算法
题目:求整数 x,y,使(4864,3458)=4864x+3458y
解答:
首先还是利用欧几里得算法求解最大公因数:
① 4864 = 1 × 3458+1406, q1 = 1,r1= 1406
② 3458 = 2 × 1406+ 646, q2= 2,r2= 646
③ 1406 = 2 × 646+114, q3 = 2,r3 = 114
④ 646 = 5 × 114+76, q4 = 5,r4 = 76
⑤ 114 = 1 × 76+38, q5 = 1,r5= 38
⑥ 76 = 2 × 38 q6= 2,r6= 0
易得,最大公因数为38
接下来依次从后往前反向表达最大公因数(从倒数第二个开始):
38 = 114 - 76 ⑤
= 114 -(646-5×114) ④
= 646 +6 ×(1406 - 2×646) ③
= 6 ×1406 - 13×(3458-2 × 1406) - 13× 3458+32× (4864 - 3458) ②
= 32× 4864 - 45× 3458 ①
所以x = 32,y = -45
证明题
题目:设(a, b)=1。证明:(d, ab)=(d, a)(d, b)
证明:
同余
大数据求模
题目:计算3801(mod 10)
解答:
采用以下性质:
若a1 ≡ a2 (mod m), b1 ≡ b2 (mod m),则a1b1≡ a2b2(mod m)
这里的思路就是凑出余数为1的数,比如这里**3****4****(mod 10) = 1**
。
可得**3****4 ****≡ 1 (mod 10) = 1**
,根据以上性质,可得**(3****4****)200 ≡ 1200 (mod 10) = 1**
两边都是乘以自己。
那么原题可得:**(3****4****)200 + 1 ≡ 1200 * 3(mod 10) = 3**
求解欧拉函数
欧拉函数的定义
与m互素的剩余类的个数称为欧拉函数,记为φ(m)。
很显然,φ(m)的值就是一个完全剩余系里面与m互素的数的个数。
欧拉函数的性质
- 设
m
,n
是两个互素的整数,则φ(mn)= φ(m)φ(n) - 对于任意一个素数p,φ(p) = p-1
其中p为素数。
例题
题目:计算11,121,143和120的欧拉函数。
解答:
首先11是素数,有定理2可得,φ(11) = 11-1 = 10
121 = 11 11 = 112,所以根据定理3可得,φ(121) = 121 (1 - 1/11) = 110
143 = 13 11,可得13和11互素,所以φ(143) = φ(13) φ(11) = 12 10 = 120
120 = 23 3 5,根据定理三可得:φ(120) = 120 (1 - 1/2)(1 - 1/3)(1-1/5) = 32
注意分解的时候,每次保证p值为素数。
同余方程组
求解同余方程
求解步骤如下:
例如:求解9x ≡ 12(mod 15)
解答如下:
① 首先判断是否有解
根据上述的充要条件,可以计算出**gcd(9,15) = 3**
,而3正好可以整除12,也就是3|12
,所以可以得出同余方程有解,并且解的数量是**3个**
。
② 所有的数除以计算出来的最大公因数
方程等价于**3x ≡ 4(mod 5)**
。
同时两边同时乘以一个3模5的乘法逆元,也就是2
,可得:6x ≡ 8(mod 5) => x ≡ 3(mod 5)
此时可以写出x的解集:x = 5k + 3
,其中k为任意整数,在15以内的正整数有:{3,8,13}
所以这道题的解就是x=3,8,13
复杂的乘法逆元可以通过辗转相除法求解,参见
中国剩余定理
定义
如果m1,m2,...,mk
是两两互素的正整数,则同余方程组:
对模m = m1m2...mk
有唯一解。设**M = m****1****m****2****...m****i-1****m****i+1****...m****k**
,**M****i****'**
为**M****i**
对模整数**m**
的逆元,方程组的解为:
例题讲解
需要求解的同余方程如下:
求解过程如下:
① 首先判断是否有解
模数分别是3/5/7
,三个数两两互素,所以可以直接求解。
② 接着根据定义,求解**M**
和**M'**
即可M
的求解:**M = m****1****m****2****...m****i-1****m****i+1****...m****k**
- m1 = 3,所以M1 = 5 * 7 = 35
- m2 = 5,所以M2 = 3 * 7 = 21
- m3 = 7,所以M3 = 3 * 5 = 15
M'
的求解:**M****i****'**
为**M****i**
对模整数**m**
的逆元
- m1 = 3,M1 = 35,所以M1’ = 2
- m2 = 5,M2 = 21,所以M2’ = 1
- m3 = 7,M3 = 15,所以M3’ = 1
③ 写出同余方程组的解:
a1 = 2 ,a2 = 3,a3 = 2
m = m1m2m3 = 3 5 7 = 105
x ≡ 2 35 2 + 1 21 3 + 1 15 2(mod 105)
x ≡ 23 (mod 105)
所以最终同余方程组的解就是**x ≡ 23 (mod 105)**
bilibili html5 player
同余方程转换同余方程组
定理
如果m1,m2,...,mk
是两两互素的正整数,m = m1m2...mk
,则同余方程:
和同余方程组:
有相同的解。
例题
这个定理可以在同余方程求解乘法逆元比较复杂的时候使用,例如下面这题:
23 和 140的乘法逆元求解需要用到辗转相除法,相对复杂,此时就可以转为同余方程组来求解。
注意,这里切记写出来的同余方程组的模数两两互素。
不互素的情况
前面的情况都是模数之间两两互素,如果有不互素的情况,例如:
处理方式如下:
根据上面所接触到的定理,可以把方程组的单个方程化为互素的方程组:
例如这里把10
化为2和5
,其余也是以此类推,接着再对这些方程组进行化简:
这里会返现模数里面还有2
和4
并不互素,由同余的定理:
x ≡ a (mod m) => x ≡ a(mod d) ,d|m
可得,由于2|4
,所以模4的解一定是模2的解,所以又可以省略一个方程:
模重复平方算法
模重复平方算法用于解决**a****n****(mod m)**
的计算,例如计算21000000(mod 77)。
运算的过程如下:
- 把
n
转为二进制:n = n**020 + n**121 + … + n**k-1**2k-1 - 假设a = a,r = 1,遍历
ni
的集合({n**0,n**1,…,n**k-1**})- 如果
i = 0
,a不变;如果i ≠ 0
, a = a2(mod m) (a2在模m下的余数) - 如果
ni = 0
,r不变;如果ni = 1
,r = r*a (mod m)
- 如果
- 遍历结束之后,r = an (mod m)
举个例子:计算21000000(mod 77)
① 首先根据欧拉定理进行化简:
φ(77) = φ(7) φ(11) = 6 10 = 60
由于gcd(2,77) = 1,所以260 ≡ 1 (mod 77),那么:21000000 = (260)16666 240 ≡ 240 (mod 77)
② 采用模重复平方算法:
由于40 = 1 23 + 1 25,所以可知:n**0,n1,n2,n4 = 0 , n3,n5**=1,假设a0 = a = 2,r = 1*
对n进行遍历可得:
- 由n0 = 0,i = 0,得:a0 = a = 2,r0 = r = 1
- 由n1 = 0,i = 1,得:a1 = a02(mod 77) = 4 ,r1 = r0 = 1
- 由n2 = 0,i = 2,得:a2 = a12(mod 77) = 16 ,r2 = r1 = 1
- 由n3 = 1,i = 3,得:a3 = a22(mod 77) = 25 ,r3 = r2 * a3 (mod 77)= 25
- 由n4 = 0,i = 4,得:a4 = a32(mod 77) = 9 ,r4 = r3= 25
- 由n5 = 1,i = 5,得:a5 = a42(mod 77) = 4 ,r5 = r4 * a5 (mod 77)= 23
二次同余
二次同余的判定
定理一:在模p
的一个既约剩余系中,恰有个模 p
的二次剩余,个模 p
的二次非剩余。
定理二:(欧拉判别法)设p为一个奇素数,gcd(a,p) = 1 。 a
是模p
的二次剩余的充要条件是:a
是模p
的二次非剩余的充要条件是:
举个例子:判定8是不是17的二次剩余
这里就可以利用定理二,首先求解出(17 - 1)/2 = 8
,88 ≡ 1(mod 17),所以是二次剩余。
勒让德符号
定义
设p
是奇素数,a
是整数,关于整变量a
的函数:
称为模p
的勒让德符号。
二次互反律
例题
题目:计算
根据上面的二次互反律可得:
很容易根据勒让德符号的定义得出,(19/3) = (1/3),而1是模3的二次剩余,所以:
所以得出原式答案为-1。