首页 > 代码库 > 辗转相除法(Euclidean Algorithm)极简证明
辗转相除法(Euclidean Algorithm)极简证明
辗转相除法的目的:求两个树的最大公约数
设两数为a、b(a > b),求它们最大公约数的步骤如下:
设q = a / b,r = a % b, 得a=bq+r(0≤r<b)。
1)若r = 0, 则b是a和b的最大公约数。
2)若r≠0,则继续考虑。可以证明:a 和 b 的最大公约数也是 b 和 r 的最大公约数
那么在第二种情况下公约数的关系就有一个递推传递的关系。
就是 a b 的公约数等于 b r(a % b)的公约数(a=bq+r)在后者不等于零的情况下,这个循环可以一直递推下去。
就是b r(a%b)之间的公约数 等于r(a % b) b%r的的公约数
…..
只到第二个 第一个数%第二个数 等于0,这时候的第第一个数:a‘,是整个过程中每一对数的最大公约,也是最开始的a 和b的最大公约数
一句话总结:给出两个自然数 first 和 second:检查 second 是否为0;如果是,则 这时候的first 为最大公约数,或者说为整个递推循环中的每一对树的最大公约数。如果second不为0,则分别用 second 和 first%second 作为下一步分 第一个数 和 第二个数 重复这一递推步骤
代码
int gcd(int first int second)
{
return second==0?first:gcd(second, first%second)
}
最大公约数用处:
最小公倍数 = 两数之积 / 最大公约数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。