歐幾里得算法
定理:兩個整數的最大公約數等於其中較小的那個數和兩數的相除餘數的最大公約數。最大公約數(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
.。。。