C++求最大最小公约数
在 C++ 中,可以使用 欧几里得算法(辗转相除法) 高效计算两个数的最大公约数(GCD)。以下是几种实现方式:
方法 1:递归实现(推荐)
|
输出:
GCD of 24 and 36 is: 12 |
方法 2:迭代实现
|
输出:
GCD of 56 and 98 is: 14 |
方法 3:使用 C++17 的
<numeric>
标准库
C++17 引入了 std::gcd
,可以直接调用:
|
注意:需编译器支持 C++17 或更高版本(编译时加
-std=c++17
)。
关键点
欧几里得算法原理: \[ gcd(a,b)=gcd(b,a\text{ mod } b) \] 直到余数为 0 时,当前的除数即为 GCD。
时间复杂度:\(O(log(min(a,b)))\),效率极高。
处理负数: 若输入可能为负数,需先取绝对值:
int gcd(int a, int b)
{
a = abs(a);
b = abs(b);
return b == 0 ? a : gcd(b, a % b);
}
扩展:计算最小公倍数(LCM)
利用公式 \(LCM(a, b)=\frac{a*b}{gcd(a,b)}\):
int lcm(int a, int b) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 qyhome!