最大公约数常用欧几里得算法求解,递归和迭代实现均基于GCD(a, b) = GCD(b, a % b),直至b为0;推荐使用迭代法避免栈溢出,处理负数时取绝对值,多个数的GCD可两两计算。

在C++中求两个数的最大公约数(GCD,Greatest Common Divisor)有多种方法,最常用且高效的是欧几里得算法(Euclidean Algorithm)。下面介绍几种常见的实现方式。
欧几里得算法基于这样一个原理:GCD(a, b) = GCD(b, a % b),直到其中一个数为0,另一个数就是最大公约数。
#include <iostream>
using namespace std;
int gcd(int a, int b) {
if (b == 0)
return a;
return gcd(b, a % b);
}
int main() {
int x = 48, y = 18;
cout << "GCD(" << x << ", " << y << ") = " << gcd(x, y) << endl;
return 0;
}
输出结果:GCD(48, 18) = 6
避免递归调用,使用循环实现,节省栈空间。
立即学习“C++免费学习笔记(深入)”;
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
逻辑清晰,效率高,适合处理大数或嵌入式环境。
C++17之前,GCC编译器提供了非标准函数 __gcd(),可直接使用(需包含 <algorithm>)。
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int x = 48, y = 18;
cout << "GCD = " << __gcd(x, y) << endl;
return 0;
}
注意:__gcd() 不是C++标准的一部分,跨平台项目中建议自己实现。
最大公约数定义为正整数,若输入可能为负数,应取绝对值。
int gcd(int a, int b) {
a = abs(a);
b = abs(b);
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
基本上就这些。推荐使用迭代版欧几里得算法,稳定、高效、可移植性强。遇到求多个数的GCD时,可以两两调用gcd函数,如 gcd(gcd(a,b),c)。
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号