三个算法都是用来求两个数的最大公因数的。只不过过程稍微有点不同。
欧几里得算法:
欧几里得算法,又称辗转相除法:例如求gcd(a,b),a大于b。
第一步:a÷b得余数c,如果余数c为0,则b为两者的最大公约数,否则继续执行直到余数为0。
第二步:b÷c得余数d,如果余数d为0,则c为两者的最大公约数,否则继续执行直到余数为0。
下面是一个实例:gcd(18,12)
18 = 1*12 + 6
12 = 2*6 + 0
所以6为最大公约数
修改的欧几里得算法:
gcd(a,b) = gcd(b,a mod b)
第一步就是 a = k1 * b + r1 即 r1 = a mod b
第二步就是 b = k2 * r1 + r2 这一步不就是gcd(b,r1)的第一步吗?
所以可以知道:等式是成立的。
多次使用上面的等式,即可得出最大公因子
例如:
扩展的欧几里得算法:
扩展的欧几里得算法,不仅求出了最大公约数d,还有另外两个整数x和y,满足以下方程:
下面用一个例子来描述整体过程:
42 = 1*30 + 12 12 = 42 - 1*30
30 = 2*12 + 6 6 = 30 - 2*12
12 = 2*6 + 0 6 = 30 - 2*(42 - 1*30)= -2*42 + 3*30
即得到最大公约数d=6 以及 x = -2 和y = 3
有:-2 *42 + 3*30 = 6 = gcd(42,30)