方法一:
短除法:
#include <stdio.h>
int main()
{
int i, n, m, x = 1 ; //定义整型变量
scanf("%d%d", &m, &n); //输入需要求公约数&公倍数的两个数
for (i = 2; i < n && i < m; i++) //任何数除1余数都为零,所以i从二开始
{ //不是知道m和n谁大谁小,所以i必须同时小于两个数
if (m % i == 0 && n % i == 0) //同时整除
{
m /= i;
n /= i;
x *= i; //最大公因数为小于它的公因数相乘
}
}
printf("%d %d", x, m * n * x); //公倍数为除等后m*n*x
return 0;
}
运行结果
方法二:
辗转相除法:
#include <stdio.h>
int qcd(int x, int y) //创建函数能判断m和n的大小,最后返回最大公约数
{
return (x % y == 0) ? y : qcd(y,x%y);
}
int main()
{
int m, n;
scanf("%d%d", &m, &n);
int cd = qcd(m, n);
printf("%d %d", cd, m * n / cd); //最大公倍数等于m*n/cd(最大公约数)
return 0;
}
运行结果