欧几里德算法,又称辗转相除法,用于计算两个整数a,b的最大公约数。
公式:gcd(a,b) = gcd(b,a mod b)
所以我们可以这么做:
- 取大的数为large,小的数为small。
- 如果large%small == 0,则small即为gcd。否则进入3。
- 将large赋值为原small,将small赋值为原large%small。重复2。
C++代码实现如下:
int gcd(int a, int b) {
int s = a < b ? a : b;
int l = a > b ? a : b;
int tmp = -1;
while (s) {
tmp = s;
s = l%s;
l = tmp;
}
return l;
}