标签:
问题:求两个数的最大公约数。
对于该问题:首先映入眼帘的就是两个数n m中寻找一个最小的值。然后从该值遍历到1.一旦 n%i==0&&m%i==0 那么i就是这个最大公约数啦。原理不言而喻。代码就不附上了。
之后一种就是比较经典的欧几里德算法。其中本质上的原理是这样的。gcd(n,m)表示n和m的最大公约数。
1:gcd(n,m) = gcd(n%m,m) (n>m)
2:gcd(0,a) = a 这是合法的。因为0可以当做被除数(废话,但是为了严谨一点再次说明一下)。
式1是递推关系。式2是判断终点。 完全符合递推关系的定义啊。(不知道Kunth能不能求出这个的闭合形式呢。)
先解释一下原理:
对于1:令r=n%m 即证明 gcd(n,m) = gcd(r,m). 其中n = km+r (k属于正整数,因为n>m所以k!=0).那么r = n-km.
也就是说要证明:gcd(n,m) = gcd(n-km,m)。也就是证明n-km和m的最大公因子是n和m的最大公因子
根据素数表达式。n-km有且只有 n与m的公因子。那么简单就能知道n-km和m的最大公因子就是n和m的最大公因子。得证。
标签:
原文地址:http://www.cnblogs.com/Milkor/p/4379621.html