辗转相除法
递归求法
int gcd(int a, int b)
{
if (b == 0) return a;
else gcd(b, a % b);
}
非递归求法
int gcd(int a, int b)
{
int r;
while (b) {
r = a % b;
a = b;
b = r;
}
return a;
}
更相减损法
递归求法:
int gcd(int a, int b)
{
if (a > b) return gcd(a - b, b);
else if (a < b) return gcd(a, b - a);
else return a;
}
非递归求法
int gcd(int a, int b)
{
while (a != b) {
if (a > b) a = a - b;
else b = b - a;
}
return a;
}
还有枚举法就不列举了
另外,C++库函数:__gcd(a,b),头文件是algorithm,可以是int,也可以是long long,L两个类型要相同,不能用浮点数
但VS是MSVC标准,没有这个函数QAQ,只有MinGW支持