:1.756KB : :1 :2023-02-03 14:06:58
最大公约数,也称最大公因数、最大公因子是指两个或多个整数共有约数中最大的一个。
最简单的是枚举法:
对两个整数a和b,共同的约数在1到min(a,b)[也就是求a和b哪个小]之间,从大到小枚举,若判断它能同时整除a和b两个数,即为两个数的最大公约数
代码:
这个_MIN的函数要保留!!,因为方法2也用到该函数!!
这个算法很简洁!但可惜的是效率依然可能较低,比如说a很大,b很小时。那么我们是否可以再加以优化呢?
可以用方法3类似的方法证明:gcd(a,b)=gcd(b,a%b)(a>b)。
这样的话,我们就可以设计出一个更为高效的算法——欧几里德算法。
欧几里德算法的时间复杂度是多少呢?a>b时
(1)若b<=a/2,gcd(a,b)变为gcd(b,a%b),显然规模至少缩小一半。
(2)若b>a/2,a%b也最少缩小为a的一半。
总之进过一次迭代,gcd(a,b)的数据规模至少会变成原来的一半,所以这个算法的时间复杂度是O(lonN)。
10-17最大公约数gcd.cpp
10-17半数集多种算法实现.CPP
10-16最大公约数.cpp
01-06求最大公约数和最小公倍数
12-31python递归求最大公约数算法