欧几里得算法求解a*x + b*y =1方程的一组整数解(扩展欧几里德)
1. 欧几里德算法求解最大公约数
1.1 算法过程
欧几里德法又名辗转相除法,可以用于求解两个正整数的最大公约数。他认为,两个正整数的最大公约数等于他们二者中较小的数和较大数与叫较小数取余值的公约数,即,假设有两个正整数 a a a 和 b b b,且 a ≥ b a \ge b a≥b。用 g c d ( a , b ) gcd(a, b) gcd(a,b)表示 a a a和 b b b的最大公约数,则 g c d ( a , b ) = g c d ( b , a % b ) gcd(a, b) = gcd(b, a \% b) gcd(a,b)=gcd(b,a%b) 其中, a % b a \% b a%b 表示 a a a 除 b b b 的余数。
由上述表达式可以发现,欧几里德法将求两个较大值 a a a 和 b b b 的最大公约数的问题转为两个相对较小的值 b b b 和 a a a % b b b 求最大公约数的问题。
令 a 1 = a , b 1 = b , a 2 = b 1 , b 2 = a 1 % b 1 , ⋯ , a n = b n − 1 , b n = a n − 1 % b n − 1 a_{1}=a,b_{1}=b,a_{2}=b_{1},b_{2}=a_{1} \% b_{1},\cdots ,a_{n}=b_{n-1},b_{n}=a_{n-1} \% b_{n-1} a1=a,b1=b,a2=b1,b2=a1%b1,⋯,an=bn−1,bn=an−1%bn−1
则 a 1 和 b 1 a_{1} 和b_{1} a1和b1 的最大公约数 g c d ( a 1 , b 1 ) = ⋯ = g c d ( a n , b n ) gcd(a_{1},b_{1}) = \cdots = gcd(a_{n},b_{n}) gcd(a1,b1)=⋯=gcd(an,b