定义:
更相减损法原本是为了约分而设计的:可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。
1:任意给定两个正整数;判断它们是否都是偶数。
若是,则用2约简;若不是则执行第二步。
2:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。
继续这个操作,直到所得的减数和差相等为止。
第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数,相当于不要第一步。
换成公式的写法:
如果A > B,则 gcd(A,B) = gcd(B,A-B)
如果A < B,则 gcd(A,B) = gcd(A,B-A)
证明:
不妨设A>B,设A和B的最大公约数为X,所以 A=aX,B=bx,其中a和b都为正整数,切a>b。
C = A-B,则有C=aX−bX=(a−b)X
因为a和b均为正整数,所以C也能被X整除,即A、B、C最大公约数均为X
所以gcd(A,B) = gcd(B,A-B)
代码实现:
int GCD(int a, int b) {
while (a != b) {
if (a > b)
a = a - b;
else
b = b - a;
}
return a;
}