题目:
小乐乐最近在课上学习了如何求两个正整数的最大公约数与最小公倍数,但是他竟然不会求两个正整数的最大公约数与最小公倍数之和,请你帮助他解决这个问题。
输入描述:
每组输入包含两个正整数n和m。(1≤n≤109, 1≤m≤109)
输出描述:
对于每组输入,输出一个正整数,为n和m的最大公约数与最小公倍数之和。
代码实现:
//求2个数最大公约数和最小公倍数之和
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
long long Max_divisor(int a, int b)
{
int c = 0;
//辗转相除法
// (a、b)的最大公约数 == (b、r)的最大公约数 注:r 为 a / b 的余数
// 所以不断除下去,直到余数为0,此时的被除数就是原(a、b)的最大公约数
//
while (c = a % b)
{
a = b;
b = c;
}
return b;
}
long long Min_multiple(int n, int m)
{
return (long long )n*m/Max_divisor(n, m);
}
int main()
{
int n = 0;
int m = 0;
long long sum = 0;
int i = 0;
scanf("%d %d", &n, &m);
//最大公约数
sum += Max_divisor(n, m);
//最小公倍数
sum += Min_multiple(n, m);
printf("%lld\n", sum);
return 0;
}