看数据结构与算法分析一书看到O(logN)复杂度求最大公约数的算法。
算法如下:
/* 求最大公约数 */
unsigned int Gcd(unsigned int M, unsigned int N)
{
unsigned int Rem;
while (N > 0) {
Rem = M % N;
M = N;
N = Rem;
}
return M;
}
该算法的时间复杂度为O(logN)。该算法主要是根据“M%N != 0 时,Gcd(M, N) == Gcd(N, M%N)”实现的。