//1.暴力试除法
#include
int the_max(int a, int b)
{ //获取两数中的较大数
return a > b ? a : b;
}
int the_min(int a, int b)
{ //获取两数中的较小数
return a < b ? a : b;
}
int main()
{
int a = 0;
int b = 0;
printf("请输入两个数字:>");
scanf("%d %d", &a, &b);
//先求最小公倍数
int min = the_max(a,b);//定义变量存储
for (; min <= a * b; min++)
{
if (min % a == 0 && min % b == 0)
break;
}
printf("%d %d两数的最小公倍数为%dn", a, b, min);
//最大公约数,原理基本相同
int max = the_min(a, b);//定义变量存储
for (; max > 0; max--)
{
if (a % max == 0 && b % max == 0)
break;
}
printf("%d %d两数的最大公约数为%dn", a, b, max);
return 0;
}//暴力试除法,效率较低
//2.优雅试除法_效率更高
//经过测试,这种方法虽然优雅
//但在求最大公约数时可能会出错
//比如 2048与408,其他方法是8,而这是16!
//没有最优的方法,只有最灵活的方法!!!
#include
int main()
{
int a = 0;
int b = 0;
printf("请输入两个数字:>");
scanf("%d %d", &a, &b);
int ret = 1;//效率提高的关键变量
while ((a * ret) % b)
ret++;
printf("%d %d两数的最小公倍数为%dn", a, b, a*ret);
int tmp = 1;//同样是重要变量
//测试发现,当先输入奇数,再输入偶数时会出错
//以及都是偶数时,前数字较大会出错
//原因:没有确定大值与小值
int min = a < b ? a : b;//找出较小值
int max = a > b ? a : b;//找出较大值
while (max%(min/tmp))
tmp++;
printf("%d %d两数的最大公约数为%dn", a, b, min / tmp);
return 0;
}