求最大公约数和最小公倍数
遍历法:
#include <stdio.h>
int main()
{
int i, x = 1, y, temp; //变量x为最大公约数,y为最小公倍数
int m, n;
printf("请输入m和n的值:");
scanf("%d,%d", &m, &n);
y = (m > n) ? m : n;
//默认m大于n的值,方便后面计算
if (m < n)
{
temp = n;
n = m;
m = temp;
}
//m与n为倍数关系
if (m % n == 0)
{
x = n;
y = m;
}
//m与n不为倍数关系
else
{
//求取最大公约数
for (i = 1; i < n; i++)
{
if (m % i == 0 && n % i == 0)
{
x = i;
}
}
//求取最小公倍数(遍历法)
while (1)
{
if (y % m == 0 && y % n == 0)
break;
++y;
}
}
printf("最大公约数为:%d\n最小公倍数为:%d", x, y);
return 0;
}
运行结果

其他方案(短除法)

#include <stdio.h>
int main()
{
int m, n;
int temp, t = 1; //t为累乘值
int i;
printf("输入两个数m,n:");
scanf("%d,%d", &m, &n);
if (m < n)
{ //默认m大于n的值,方便后面计算
temp = m;
m = n;
n = temp;
}
for (i = 2; i <= n; i++)
{
if ((m % i == 0) && (n % i == 0))
{ //判断是否为公约数
m /= i;
n /= i;
t *= i; //约数累乘,得出最大公约数
i = 2; //每次循环开始的变量初始化
if (n == 1)
break;
}
}
printf("最大公约数为%d\n", t);
t = m * n * t; //约数累乘再乘上m和n的最终余数,得出最小公倍数
printf("最小公倍数为%d\n", t);
return 0;
}