最大公约数:
方法一:(遍历法)
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int ret = 0;
if (a > b)
ret = b;
else
ret = a;
while (1)
{
if (a % ret == 0 && b % ret == 0)
break;
ret--;
}
printf("%d\n", ret);
return 0;
}
注:最大公约数最大也就是与这两数中较小数相等,因此,我们可以将其最大公约数假设为这俩数的较小数,然后一一遍历,直到找到其最大公约数为止。
方法二:(辗转相除法)
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int ret = 0;
while (ret = a % b)
{
a = b;
b = ret;
}
printf("%d\n", b);
return 0;
}
注:将a(其中一个数)当作被除数,b(另一个数)当作除数,进行除法运算,若余数不为0,则将上次除法运算的除数当作被除数,余数当作除数,再进行除法运算,直到余数为0,则此时的除数即为这两个数的最大公约数。
最小公倍数:
int main()
{
int m = 0;
int n = 0;
scanf("%d %d", &m, &n);
int n1 = n;
int m1 = m;
int ret = 0;
while (ret = m1 % n1)
{
m1 = n1;
n1 = ret;
}
printf("%d %d\n", n1,(m*n)/n1);
return 0;
}
注:最小公倍数可用其这两个数的乘积除以它俩的最大公约数得到。