题目
明明是求最大公倍数,题目名称却叫最大公约数,赶紧改一下题目名称吧
思路
如题目所示,要求两个正整数 a , b a,b a,b 的最小公倍数,就要先求得两个数的最大公约数。
假设 a = p × g , b = q × g a=p\times g,b=q\times g a=p×g,b=q×g,其中 g g g 为 a , b a,b a,b 的最大公约数,根据数学知识可知, p , q p,q p,q 一定是互素的,所以 p , q p,q p,q 的最小公倍数就是 p × q p\times q p×q,再求 a , b a,b a,b 的最小公倍数时,只需要将 p × q p\times q p×q 乘以1遍最大公约数 g g g 即可,所以最后的答案为 p × q × g p\times q\times g p×q×g。
代码
#include <iostream>
// 简化代码,所以引入std命名空间
using namespace std;
int main(void) {
// 简化代码
using ULL = unsigned long long;
ULL a = 0, b = 0;
cin >> a >> b;
// 计算最大公约数
auto gcd = [&](ULL m, ULL n) {
ULL t = 0;
while (n) {
t = m % n;
m = n;
n = t;
}
return m;
};
ULL g = gcd(a, b);
// 再计算最小公倍数
cout << (a / g) * (b / g) * g << endl;
return 0;
}