(1)穷举法
c=两个数中小的一个,给两个数分别取余c,判断余数是否为0
为0,c就是最大公约数
不为0,依次给c–判断啥时候两个数的余数都为0,即为最大公约数
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d",& a, &b);
int c = a > b ? a : b;
for (c; c > 0; c--)
{
if (a%c == 0 && b%c == 0)
break;
}
printf("c = %d\n", c);
return 0;
}
(2)辗转相减法
如果两个数相等,最大公约数就是它们自身,
不相等,大的数减去小的数赋给大的数,直到它们两个相等
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
while (a != b)
{
if (a > b)
a = a - b;
else
b = b - a;
}
printf("%d \n", a);
return 0;
}
(3)辗转相除法
c=a%b 判断c是否为0
为0,c即为最大公约数
不为0,a=b,b=c,再次求c,直到为0
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d",& a, &b);
int c = a%b;
while (c != 0)
{
a = b;
b = c;
c = a%b;
}
printf("c = %d\n", b);
return 0;
}