描述:
输入两个正整数m和n,求其最大公约数a和最小公倍数b。
输入
输入两个正整数m和n。(1≤n,m≤231−1,但是不保证n×m≤231−1),注意整型数据的范围。请仔细思考如何处理。
输出
输出最大公约数a和最小公倍数b,用空格隔开。
保证结果1≤a,b≤231−1
样例:
1000000000 2000000000
12 15
1000000000 2000000000
3 60
提示
注意,有两种解法都可解此题。
介绍其中一种,辗转除法:在m>n条件下,令a=m,b=n,且b!=0条件下,反复求a与b的余数。
#include <stdio.h>
#include <math.h>
int main ()
{
int m,n;
scanf("%d %d",&m,&n);
int i;
int a,b = 1;
for(i=1; i<=m||i<=n; i++)
{
if(m%i==0 && n%i==0)
{
a=i; //每次更新公因数,最后循环结束的时候即为最大公因数
}
}
b = (m/a)*(n/a)*a; //求最大公约数
printf("%d %d",a,b);
return 0;
}