欧几里得算法
定理:两个整数的最大公约数等于其中较小的那个数和两数的相除余数的最大公约数。最大公约数(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。