给定两个整数,求这两个数的最大公约数
从较小的那个数开始,依次递减,直到某个数能够同时被整除
//暴力求解
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int i = 0;
int min = a > b ? b : a;
for (i = min; i >= 0; i--)
{
if (a % i == 0 && b % i == 0)
break;
}
printf("%d\n", i);
return 0;
}
将两个数做余,如果余数不为0,将第二个数赋给第一个数,将余数赋给第二个数,继续取余,直到余数为0,此时第二个数就是最大公约数
//辗转相除法
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int val = 0;
while (val = a % b)
{
a = b;
b = val;
}
printf("%d\n", b);
return 0;
}
假设两个整数a和b,这两个数的最大公约数为z
最小公倍数 = ( a * b ) / z
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
//计算最大公约数
int val = 0;
int x = a;
int y = b;
while (val = x % y)
{
x = y;
y = val;
}
//最小公倍数 = (a*b)/最大公约数
printf("%d\n", (a * b) / y);
return 0;
}
val;
}
//最小公倍数 = (a*b)/最大公约数
printf("%d\n", (a * b) / y);
return 0;
}