题目描述:
输入两个正整数,输出其最大公约数和最小公倍数。
输入:
输入两个正整数n和m(n,m<=1000000)。输入保证最终结果在int范围内
输出:
输出两个整数,用空格隔开。表示m和n的最大公约数和最小公倍数
样例输入
4 6
样例输出
2 12
思路:
求最大公约数,有两个方法(详细见上一篇),求出最大公约数后,m*n/最大公约数(max) 即是 最小公倍数。代码思路:先通过循环,用辗转相除法求出最大公约数,之后再用 m/max*n (先除后乘,防止溢出)求出最小公倍数。
代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int m = 0;
int n = 0;
int t = 0;
int min = 0;
int max = 0;
int a = 0;
int b = 0;
scanf("%d %d", &m, &n);
//辗转相除法求最大公约数
a = m;
b = n;
while (t=m%n) //当余数为0时,循环结束,n即为最大公约数
{
m = n;
n = t;
}
max = n; //最大公约数
//最小公倍数=m*n/最大公约数
min = a / max * b; //先除后乘,防止数据溢出
printf("%d %d", max, min);
return 0;
}