1.辗转相除法
假设要用辗转相除法求 36 和 24 的最大公约数,则要经历以下步骤:
36 ÷ 24 = 1 …… 12
24 ÷ 12 = 2 …… 0
12 为 36 和 24 的最大公约数
#include <stdio.h>
int main()
{
int x = 0;
int y = 0;
scanf("%d %d", &x, &y);
while (1)
{
if (x < y)//比较大小,让小的数放在后面
{
int tmp = x;
x = y;
y = tmp;
}
if (x % y == 0)//若余数为 0 则 y 为两数的最大公约数;
{
printf("最大公约数的 %d\n", y);
break;
}
else//若余数不为 0,则令 x = y,y = 余数,重复循环
{
int tmp = x % y;
x = y;
y = tmp;
}
}
return 0;
}
2.更相减损法
以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到它们两个数相等为止。则相等的两个数就是所求的最大公约数
步骤
下面先看实例:(还是求36和24的最大公约数)
36 - 24 = 12
24 - 12 = 12
12 是 36 和 24 的最大公约数
#include <stdio.h>
int main()
{
int x = 0;
int y = 0;
scanf("%d %d", &x, &y);
while (1)
{
if (x < y)//比较大小,让小的数放在后面
{
int tmp = x;
x = y;
y = tmp;
}
if (x - y == 0)//若差为 0,则两数相等,它本身就是最大公约数;
{
printf("最大公约数的 %d\n", y);
break;
}
else//若差不为 0,则令 x = y,y = 差,重复循环
{
int tmp = x - y;
x = y;
y = tmp;
}
}
return 0;
}