两个整数的最大公因子(gcd)是同时整除二者的最大整数。
计算gcd(M,N),假设M>=N,如果不相等,可在程序中将它们互相交换
long gcd(long m, long n)
{
while(n != 0)
{
long rem = m%n;
m = n;
n = rem;
}
return m;
}
算法分析:
算法的运行时间是多少?
看不出余数的值按照常数因子递减的必然性。事实上,在一次迭代中余数不按照一个常数因子递减,但是可以证明,在两次迭代后,余数最多是原始值的一半。
这就证明了,迭代次数最多是2logN=O(logN)从而得到运行时间。
参考:《数据结构与算法分析C++描述》