编程语言
首页 > 编程语言> > 5.C++: 求最大公约数,最小公倍数。

5.C++: 求最大公约数,最小公倍数。

作者:互联网

1.辗转相除法求最大公约数(greatest common divisor)

2.更相减损术求最小公约数

 

改进:更相减损术是不稳定的算法,当两个数相差悬殊时,如10000和1的最大公约数,要递归9999次。

做法;

当a和b都是偶数时,gcd(a,b)=2*gcd(a/2,b/2)=2*gcd(a>>1,b>>1)。

当a是奇数,b是偶数时,gcd(a,b)=gcd(a,b/2)=gcd(a,b>>1)。

当a是偶数,b是奇数时,gcd(a,b)=gcd(a/2,b)=gcd(a>>1,b)。

当a和b都是奇数数时,gcd(a,b)=gcd(a-b,b)。

算法复杂度:

辗转相除法:O(log(max(a,b)))

更相减损法:O(max(a,b))

改进更相减损法:O(log(max(a,b)))

参考自https://www.cnblogs.com/developing/articles/11295551.html

3.求最小公倍数

算出x,y最大公约数m,得最小公倍数x*y/m。

标签:gcd,更相,公倍数,max,C++,减损,最大公约数
来源: https://www.cnblogs.com/NKHTH/p/14165485.html