用c++ 求两个自然数m和n的最大公约数
时间: 2024-01-19 13:03:31 浏览: 92
以下是使用辗转相除法(欧几里得算法)求两个自然数m和n的最大公约数的C代码:
```c
#include <stdio.h>
int gcd(int m, int n) {
int r;
while (n != 0) {
r = m % n;
m = n;
n = r;
}
return m;
}
int main() {
int m, n;
printf("请输入两个自然数m和n:");
scanf("%d%d", &m, &n);
printf("它们的最大公约数为:%d\n", gcd(m, n));
return 0;
}
```
这里的gcd函数使用了while循环和辗转相除法,直到n为0时,m就是最大公约数。在主函数中,从键盘输入两个自然数m和n,然后调用gcd函数计算它们的最大公约数并输出结果。
相关问题
用两种方法求两个自然数m和n的最大公约数。 1 两种算法的伪码 2 c++代码的设计与实现
求两个自然数m和n的最大公约数(GCD,Greatest Common Divisor)可以采用欧几里得算法(Euclidean Algorithm),这是基于辗转相除法的思想。这里有两种常见的算法:
1. **算法一:辗转相除法**
- **伪码**(Euclid's algorithm):
```
function gcd(m, n):
if n == 0:
return m
else:
return gcd(n, m % n)
```
2. **算法二:更相减损术**
- **伪码**(Subtraction method, also known as Euclid's lemma in some cases):
```
function gcd(m, n):
while n != 0:
(m, n) = (n, m % n)
return m
```
对于C++代码设计和实现,这里分别给出两种方法:
```cpp
// 使用辗转相除法
#include <iostream>
int gcd(int m, int n) {
if (n == 0)
return m;
else
return gcd(n, m % n);
}
int main() {
int m, n;
std::cout << "Enter two numbers: ";
std::cin >> m >> n;
std::cout << "The GCD of " << m << " and " << n << " is: " << gcd(m, n) << "\n";
return 0;
}
// 使用更相减损术
#include <iostream>
int gcd(int m, int n) {
while (n != 0) {
int temp = m % n;
m = n;
n = temp;
}
return m;
}
int main() {
// ...(其余部分与辗转相除法版本相同)
}
```
DEVC++求两个自然数的最大公约数和最小公倍数代码
以下是求两个自然数的最大公约数和最小公倍数的代码示例:
```c++
#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 a, b;
cout << "请输入两个自然数:" << endl;
cin >> a >> b;
int g = gcd(a, b);
int l = lcm(a, b);
cout << "最大公约数为:" << g << endl;
cout << "最小公倍数为:" << l << endl;
return 0;
}
```
需要注意的是,该代码中我们使用递归方式求最大公约数,同时使用最大公约数求出最小公倍数。
阅读全文