求两个数的最大公约数和最小公倍数c++
时间: 2023-04-29 17:06:46 浏览: 123
在C++中,求两个数的最大公约数和最小公倍数,可以通过使用Euclid算法和最小公倍数公式来实现。其中Euclid算法的伪代码如下:
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
而最小公倍数可以通过以下公式计算得出:
int lcm(int a, int b) {
return (a * b) / gcd(a, b);
}
相关问题
求两个数的最大公约数和最小公倍数C++
在C++中,计算两个数的最大公约数(Greatest Common Divisor,GCD)和最小公倍数(Least Common Multiple,LCM)通常可以使用欧几里得算法(Euclidean Algorithm)和公式法来进行。以下是简单的实现:
1. **最大公约数(GCD)**:
使用辗转相除法(也称欧几里得算法),C++代码如下:
```cpp
int gcd(int a, int b) {
if (b == 0)
return a;
else
return gcd(b, a % b);
}
```
或者使用C++标准库`<numeric>`中的`gcd`函数:
```cpp
#include <numeric>
int gcd(int a, int b) {
return std::gcd(a, b);
}
```
2. **最小公倍数(LCM)**:
最小公倍数可以通过GCD和乘积计算得出,因为 \( \text{LCM}(a, b) = \frac{|a \times b|}{\text{GCD}(a, b)} \)。因此,你可以先计算两数之积,然后用上面的GCD函数求出GCD,再用两者相除得到LCM:
```cpp
int lcm(int a, int b) {
return abs(a * b) / gcd(a, b);
}
```
如果你想避免整数除法造成的溢出,可以用`std::lcm`函数替换:
```cpp
int lcm(int a, int b) {
return std::lcm(a, b);
}
```
注意:`<numeric>`库里的`lcm`函数需要C++17及以上版本支持。
c++输入两个数求两个数最大公约数和最小公倍数
好的,以下是一个简单的 C++ 程序,可以实现您的要求:
```cpp
#include <iostream>
using namespace std;
// 求最大公约数
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
// 求最小公倍数
int lcm(int a, int b) {
return a * b / gcd(a, b);
}
int main() {
int num1, num2;
cout << "请输入两个正整数:" << endl;
cin >> num1 >> num2;
cout << num1 << "和" << num2 << "的最大公约数是:" << gcd(num1, num2) << endl;
cout << num1 << "和" << num2 << "的最小公倍数是:" << lcm(num1, num2) << endl;
return 0;
}
```
这个程序会要求用户输入两个正整数,然后利用辗转相除法求它们的最大公约数,再利用最大公约数求出它们的最小公倍数,最后输出结果。
阅读全文