C语言欧几里德求最大公约数算法
时间: 2025-04-26 21:13:40 浏览: 47
### C语言实现欧几里德算法计算最大公约数
在C语言中,利用欧几里得算法(Euclidean Algorithm),即辗转相除法,能够高效地求解两个正整数的最大公约数(Greatest Common Divisor, GCD)[^1]。此方法的核心在于不断执行除法与取模操作直至余数归零,此时最后的非零除数便是所求的最大公约数。
下面展示了一个遵循特定要求编写的`Gcd()`函数实例[^3]:
```c
#include <stdio.h>
int Gcd(int a, int b) {
// 判断输入是否为正整数
if (a <= 0 || b <= 0) {
return -1;
}
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
int main() {
int a, b;
printf("Input a,b:\n");
scanf("%d,%d", &a, &b);
int result = Gcd(a, b);
if(result == -1){
printf("Input error!\n");
}else{
printf("Gcd=%d\n",result);
}
return 0;
}
```
上述程序首先定义了`Gcd()`函数用于接收两个参数并返回它们之间的最大公约数值。对于非法输入情况(负数或零),该函数会立即终止并向调用者报告错误状态(-1)。接着,在主函数部分提供了友好的命令行界面供用户交互式地提供待处理的数据对,并最终打印出相应的结果或者提示信息。
此外,还存在一种简洁优雅的方式——递归来表达同样的逻辑过程[^4]:
```c
#include <stdio.h>
// 定义gcd函数,采用递归形式
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);
if(num1<=0||num2<=0){
printf("输入有误,请确保输入的是正整数。\n");
}else{
printf("这两个数的最大公约数是:%d\n",gcd(num1,num2));
}
return 0;
}
```
这种版本不仅保持了原有的功能特性,而且更加直观易懂,减少了显式的循环控制语句,使得代码更具有可读性和美感。
阅读全文
相关推荐













