欧几里得算法相关

欧几里得算法

定理:两个整数的最大公约数等于其中较小的那个数和两数的相除余数的最大公约数。最大公约数(greatest common divisor)缩写为gcd。

证明
a / b = k …… r
即证明gcd(a,b) = gcd (b ,r)。
1. 令 c = gcd( a ,b) ,则a = mc; b = nc ;m , n 互素,否则 c 就不是最大公约数。m,n 为整数。
2. 余数 r = a - kb = (m - kn) c , 则 c 也是 r 的因子。
3. 接下来证明 c = gcd (b,r),即证明(m - kn)与 n 互素。假设(m - kn)与 n 不互素,设 m - kn = xd 、n = yd,d!= 1那么 m = xd + kn = xd + kyd = ( x + ky )d ,则有gcd(m ,n)= d,与 m 、n互素矛盾,则假设不成立,即证得(m - kn)与 n 互素 ——》c = gcd (b,r)—–》gcd(a,b) = gcd (b ,r)。证毕。

举例
gcd(26,8)= gcd(8,26-3*8) = gcd(8,2) = 2.
gcd(26,11) = gcd(11,4) = gcd(4,3)=gcd(3,1)=1

扩展欧几里得算法

定理:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在无数组整数对 x,y ,使得 gcd(a,b)=ax+by。

求解 x、y 步骤如下
以 gcd(26,8)= 2 为例,求解 2 = 26x + 8y 的 x 、y。

序号 操作(a,b)//b == 0时停止 序号 操作
1 (26,8) 6 x3 = y2 = 1 ; y3 = x2 - a/b * y2 = 0 - 3 * 1 = -3
2 (8,2)//a = b = 8; b = a % b = 26 % 8 5 x2 = y1 = 0 ; y2 = x1 - a/b * y1 = 1 - 8/2 *0 = 1
3 (2,0)//a = b = 2 ; b = a % b = 8 % 2 4 x1 = 1 ; y1 = 0

求乘法逆元步骤如下:

当gcd(a,b)=1时乘法逆元存在。以求 11 mod 26 的乘法逆元为例:

序号 操作(1,0,a) 序号 操作(0,1,b)//b == 0时停止
1 (1,0,26) 2 (0,1,11)
3 (0,1,11)//取自2 4 (1,-2,4) //(1-0*(26/11),0-1*(26/11),26%11)
5 (1,-2,4)//取自4 6 (-2,5,3)//(0-1*(11/4),1-(-2)*(11/4),11%4)
7 (-2,5,3)//取自6 8 (3,-7,1)//(1-(-2)(4/3),-2-5(4/3),4%3)

即得11 mod 26 的乘法逆元为 -7 ,取正的 (-7%26+26)%26 = 19.
使用上述方法可以求得: 1 mod 26 的乘法逆元 = -1
3 mod 26 的乘法逆元 = 9
5 mod 26 的乘法逆元 = 21
.。。。

你可能感兴趣的:(数学)