输入描述:每组输入包含两个正整数n和m。(1 ≤ n ≤ 109,1 ≤ m ≤ 109)
输出描述:对于每组输入,输出一个正整数,为n和m的最大公约数与最小公倍数之和。
具体代码:
#include <stdio.h>
//暴力求解:
//耗时太久,不满足条件
int main()
{
long long n = 0;
long long m = 0;
long long tmp = 0;
scanf("%lld %lld", &n, &m);
long long max = m>n?n:m;
while(max)
{
if(m%max==0 && n%max==0)
{
break;
}
max--;
}
long long min = m>n?m:n;
while(min)
{
if(min%m==0 && min%n==0)
{
break;
}
min++;
}
printf("%lld\n", max+min);
return 0;
}
//辗转相除法
int main()
{
long long n = 0;
long long m = 0;
long long tmp = 0;
scanf("%lld %lld", &n, &m);
int a = n;
int b = m;
while(tmp=a%b)
{
a = b;
b = tmp;
}
printf("%lld\n", b+m*n/b);
return 0;
}