前
最大公因数,又叫gcd/最大公约数。
解决的两大算法:更相减损 辗转相除
以下附简单证明
中
更相减损
记住:这是我们中国人的算法!
用大数减小数的差和小数的最大公约数与原来两个数的最大公约数相等
证明:
代码实现
int gcd(int x , int y) {
if(x==y) return x;
if(x<y)
return gcd(y-x , x);
return gcd(x-y , y);
}
辗转相除
又叫欧几里得算法
证明:
稍微解释一下上面的证明(证明来自百度百科)
从上到下看下来应该也就是倒数第四行的结论可能有问题吧,其实可以知道 m m m和 n n n是互质的(因为如果不互质,则第一行假设不成立),所以y%x一定不等于零,所以 y + k x y+kx y+kx一定与 x x x互质,那么就有倒数第四行的“可得”了。
代码实现:
int gcd(int x , int y) {
return y==0?x:gcd(y,x%y);
}
后
忘记好多知识点了,第一遍学的时候也不仔细也没搞懂原理
希望大家这一遍看过就真的搞懂这个算法,手推一下证明过程哦