GCD算法的概念:
- 一种求最大公约数的算法
GCD算法的时间复杂度:
- 设gcd(a,b)(b<=a),则gcd算法的时间复杂度为:
GCD算法的代码:
-
int gcd(int a,int b){ if(a<b)swap(a,b); if(b==0)return a; return gcd(b,a%b); }
- 《算法竞赛入门经典(第二版)》:
可以证明,gcd函数的递归层数不超过4.785lgN+1.6723,其中N=max{a,b}。值得一提的是,让gcd递归层数最多的是,其中是后文要介绍的Fibonacci数。
GCD求最大公约数的思路:
- 首先,有这样一个结论:gcd(a,b)=gcd(b,a%b)
- 若递归时发现此时b=0,则直接返回a即可(事实上在逻辑上应当在b=0之前判断并返回a,但这样写应当比较方便)