求最大公约数的函数
----------------kvew www.smatrix.org
利用广义欧几里得除法
设a,b是任意的两个正整数,记 R0 = a, R1 = b,反复运用欧几里得除法,有:
R0 = R1*Q1 + R2, 0<=R2<R1,
R1 = R2*Q2 + R3, 0<=R3<R2,
-------------------------------------------------
R (n-2) = R(n-1)*Q(n-1) + R(n), 0<=R(n)<R(n-1),
R (n-1) = R(n)*Q(n) + R(n+1), R(n+1) = 0,
经过有限步骤,必然存在n使得R(n+1) = 0,因为:
0 <= R(n+1) < R(n) < R(n-1) < -----< R2 < R1 = b
且b是有限正整数。
定理:设a,b是任意两个正数,则(a,b) = R(n),其中R(n)为广义欧几里得除法中最后一个非零余数。证明略。
其实原理讲了这么多,真正的函数只有以下怎么几行:
int gcd(int a, int b){
if(b == 0)
return a;
return gcd(b, a%b);
}
参考 :《信息安全数学基础》