辗转相除法又叫欧几里得算法,本质很简单,就是小学学的那些内容。
①对a,b做求余(求模)运算,判断余数是否等于零。若为0,则a,b的最大公约数为b
②若不为0,则把之前b的值赋值给a,r的值赋值给b,再做一次求余判断。重复直到余数为零,此时的b就是最大公约数。
int gcd(int a, int b) {
int r = a % b;
while (r != 0) {
a = b;
b = r;
r = a % b;
}
return b;
}
上面的代码就是一步一步来,其实可以写一个函数的迭代,如下:
int gcd(int a, int b) {
return b ? gcd(b, a % b) : a;
}