穷举法求最大公约数
cs
#include<stdio.h>
int Gcd(int i, int j)//穷举法求最大公约数
{
int min = (i > j) ? j : i;//条件表达式,找到最小值
while (1)
{
if (i % min == 0 && j % min == 0)
break;
min--;
}
return min;
}
int main()
{
int i = 0;
int j = 0;
printf("请输入两个整数:\n");
scanf("%d,%d", &i, &j);
int ret = Gcd(i, j);
printf("%d", ret);
return 0;
}
欧几里得算法(辗转相除法)求最大公约数
cs
#include<stdio.h>
int Gcd(int i, int j)//欧几里得算法(也称辗转相除法)
{
int r = 0;
int max = 0;//存储i,j中的最大值
int min = 0;//存储i,就,中的最小值
if (i < j)
{
max = j;
min = i;
}
else
{
max = i;
min = j;
}
while (1)
{
r = max % min;
max = min;
min = r;
if (r == 0)
break;
}
return max;
}
int main()
{
int i = 0;
int j = 0;
printf("输入两个整数:\n");
scanf("%d,%d", &i, &j);
int ret = Gcd(i, j);
printf("%d", ret);
return 0;
}
用递归求最大公约数
cs
#include<stdio.h>
int Gcd(int i, int j)//递归求最大公约数
{
if (i > j)//如果i<j,则i和j与i-j和j的最大公约数相同,即Gcd(i,j)=Gcd(i-j,j)
return Gcd(i - j, j);
else if (i < j)//如果j < i,则i和j与i和j-i的最大公约数相同,即Gcd(i,j)=Gcd(i,j-i)
return Gcd(i, j - i);
else
return i; //如果i=j,则i和j的最大公约数与i值和j值相同, 即Gcd(i, j) =i=j
}
int main()
{
int i = 0;
int j = 0;
printf("输入两个整数:\n");
scanf("%d,%d", &i, &j);
int ret = Gcd(i, j);
printf("%d", ret);
return 0;
}