很快ACM校集训队要选拔了,想学一波算法,顺便记下模板。
最大公约数
功能
输入两个数a
和b
,输出a
和b
的最大公约数.
最大公约数:
1. 既可以整除a
,也可以整除b
的数,组成集合C
2. 集合C
中的最大元素,即最大公约数
思路
辗转相除法:
1. 用a
和b
中较大值max
除以较小值min
2. 若整除,则结果为min
3. 若不整除,则令a
和b
分别等于min
和余数mod
,递归步骤1
原理
a
和b
的最大公约数等于min
和mod
的最大公约数。
时间复杂度
O(log n)
模板
/**
* @param a: number A
* @param b: number B
* @return: the greatest common divisor of A and B
* @other: 0 < b, b <= a
*/
int GCD(int a, int b) {
return b == 0 ? a : GCD(b, a % b);
}