问题:给定两个整数a和b,求解他们的最大公约数。
求解方法网上已经有很多资料,这里只是谈谈求解方法的证明:
a可以写成a=kb+r(0<=r<b),这里设最大公约数永为正数,因此不管a、b的正负性,也不管a的绝对值是否小于b的绝对值(当小于时k为0,r等于a,最终的效果是一样的)。假设c是公约数,则a=mc,b=nc,r=a-kb=mc-knc=(m-kn)c,m-kn一定是个整数,因此c是a、b、r的公约数,进一步得到a与b的公约数等于b与r的公约数,即a mod c = b mod c = r mod c = 0,简化成符号表示为cd(a,b)=cd(b, a mod b)。
下面是如何求得最大公约数,假设a mod b不为0则继续使用该公式b变成a,a mod b变成b,最后成为cd(b, a mod b)=cd(a mod b,b mod (a mod b)),这就是递归公式。那么最后假设a mod b等于0,那就是说明a与b的公约数就是b,而这个b也是求得的最大公约数,因此递归公式停止的条件是a mod b=0。