51Nod-3045 Lcm与Gcd构造 题解
题目概述
已知gcd(a,b)和lcm(a,b),求满足条件的ab使得a+b最小
思路分析
根据和可以求得
然后枚举的因子分别作为和,判断是否满足条件并求最小值
实际复杂度过大,所以这里采用另外的方式
令,
则,
只需要枚举因子即可
AC代码
#include <bits/stdc++.h>
using namespace std;
typedef long long llong;
const int N = 2e5 + 5;
const int MOD = 1e9 + 7;
llong gcd, lcm;
int main() {
#ifdef LOCAL
freopen("D:/Code/ACM/in.in", "r", stdin);
freopen("D:/Code/ACM/out.out", "w", stdout);
#endif
cin.tie(0)->sync_with_stdio(0);
int T = 1; cin >> T;
while (T--) {
cin >> gcd >> lcm;
llong t = lcm / gcd;
llong ans = 0x7fffffffffffffff;
for (llong i = 1; i <= t / i; i++) {
if (t % i == 0 && __gcd(i, t / i) == 1) {
ans = min(ans, gcd * (i + t / i));
}
}
cout << ans << "\n";
}
return 0;
}