在C语言中,求两个整数的最大公约数(GCD)有多种方法,其中最常用的是辗转相除法(也称为欧几里得算法)。以下是几种常见的实现方法:
辗转相除法(递归实现)
```c
include
int gcd(int a, int b) {
if (b == 0) {
return a;
} else {
return gcd(b, a % b);
}
}
int main() {
int num1, num2;
printf("请输入两个整数: ");
scanf("%d %d", &num1, &num2);
int result = gcd(num1, num2);
printf("最大公约数为: %d\n", result);
return 0;
}
```
辗转相除法(循环实现)
```c
include
int gcd(int a, int b) {
while (b != 0) {
int temp = a % b;
a = b;
b = temp;
}
return a;
}
int main() {
int num1, num2;
printf("请输入两个整数: ");
scanf("%d %d", &num1, &num2);
int result = gcd(num1, num2);
printf("最大公约数为: %d\n", result);
return 0;
}
```
更相减损法
```c
include
int gcd(int a, int b) {
if (a == b) {
return a;
}
if (a > b) {
return gcd(a - b, b);
} else {
return gcd(a, b - a);
}
}
int main() {
int num1, num2;
printf("请输入两个整数: ");
scanf("%d %d", &num1, &num2);
int result = gcd(num1, num2);
printf("最大公约数为: %d\n", result);
return 0;
}
```
穷举法
```c
include
int gcd(int a, int b) {
int min = a < b ? a : b;
for (int i = min; i > 0; i--) {
if (a % i == 0 && b % i == 0) {
return i;
}
}
return 1; // 如果两个数都是0,则最大公约数为1
}
int main() {
int num1, num2;
printf("请输入两个整数: ");
scanf("%d %d", &num1, &num2);
int result = gcd(num1, num2);
printf("最大公约数为: %d\n", result);
return 0;
}
```
这些方法都可以有效地求出两个整数的最大公约数。辗转相除法和更相减损法是最常用的两种方法,它们的时间复杂度都是O(log(min(a, b))),效率较高。穷举法虽然直观,但时间复杂度为O(min(a, b)),效率较低,不推荐在处理大数时使用。