给定两个正整数a、b,求它们的最大公约数。 输入描述 两个正整数a、b(1≤a≤103,1≤b≤103)。 输出描述 输出a和b的最大公约数。 C语言回答
时间: 2024-03-26 08:35:40 浏览: 99
可以使用辗转相除法(又称欧几里得算法)求两个正整数的最大公约数。具体步骤如下:
1. 将a、b中较大的数赋值给max,较小的数赋值给min;
2. 用max除以min,得到商q和余数r;
3. 如果r等于0,那么min就是a和b的最大公约数;
4. 否则,将min赋值为r,将max赋值为原来的min,然后返回步骤2。
以下是C语言的代码实现:
```c
#include <stdio.h>
int gcd(int a, int b) {
int max = a > b ? a : b;
int min = a <= b ? a : b;
while (min != 0) {
int r = max % min;
max = min;
min = r;
}
return max;
}
int main() {
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n", gcd(a, b));
return 0;
}
```
其中,gcd函数用于求a和b的最大公约数。在while循环中,用max除以min,得到商q和余数r。如果r等于0,那么min就是a和b的最大公约数,直接返回min即可。否则,将min赋值为r,将max赋值为原来的min,继续循环。最后输出最大公约数即可。
相关问题
题目描述 给定两个正整数aa、bb,求它们的最大公约数。 输入描述 两个正整数aa、bb(1≤a≤103,1≤b≤1031≤a≤103,1≤b≤103)。 输出描述 输出aa和bb的最大公约数。 用c语言
以下是用C语言实现的代码:
```c
#include <stdio.h>
int gcd(int a, int b) {
if (b == 0) { // 如果b等于0,那么a就是最大公约数
return a;
} else { // 否则递归求b和a%b的最大公约数
return gcd(b, a % b);
}
}
int main() {
int a, b;
scanf("%d %d", &a, &b); // 读入两个整数
int ans = gcd(a, b); // 求它们的最大公约数
printf("%d\n", ans); // 输出最大公约数
return 0;
}
```
该程序定义了一个名为`gcd`的函数,用于求两个整数的最大公约数。该函数使用了递归算法,如果`b`等于0,则`a`就是最大公约数;否则递归调用`gcd`函数求`b`和`a%b`的最大公约数。主函数中读入两个整数,然后调用`gcd`函数求它们的最大公约数,并输出该值。
python 给定两个正整数,求它们的最大公约数。 输入描述 输入一行,包含两个正整数(<1,000,000,000)。 输出描述 输出一个正整数,即这两个正整数的最大公约数。 样例输入 6 9 样例输出 3
我的回答是:
这道题是求两个正整数的最大公约数,可以使用辗转相除法来解决。具体步骤如下:先用较小的数去除较大的数,得到余数,然后再用上一轮的余数去除这一轮的余数,直到余数为0为止,此时除数就是最大公约数。
下面是使用Python实现的代码:
a, b = map(int, input().split())
while b:
a, b = b, a % b
print(a)
希望我的回答能帮到你。如果你还有其他问题,可以继续问我哦。
阅读全文