先想一个问题:哪些数满足恰好只被
很简单,是
我们令
我们设
- 取出队首
。如果 是 的倍数,把 放进优先队列;如果 是 的倍数,把 放进优先队列。
队首即为答案。
不懂可以配合代码食用:
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, m, K, ans;
priority_queue<int, vector<int>, greater<int> > q;
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> n >> m >> K;
int lcm = n * m / __gcd(n, m);
int s = (lcm / n - 1) + (lcm / m - 1);
int k = (K-1) / s;
K = (K-1) % s + 1;
q.push(k * lcm);
while (K--) {
int x = q.top(); q.pop();
if (x % n == 0) q.push(x+n);
if (x % m == 0) q.push(x+m);
}
cout << q.top();
return 0;
}