#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ld = long double; using ll = long long; using ull = unsigned long long; template using pq = priority_queue; template using pqg = priority_queue, greater>; template inline bool chmin(T& a, const U& b) { if (a > b) { a = b; return 1; } return 0; } template inline bool chmax(T& a, const U& b) { if (a < b) { a = b; return 1; } return 0; } #define all(v) begin(v), end(v) void solve() { ull a, b, k; cin >> a >> b >> k; if (a < b) swap(a, b); auto check = [&]() { vector sum; for (int i = 1; sum.size() <= k; ++i) { if (i % a == 0 || i % b == 0) continue; sum.push_back(i); } return sum[k-1]; }; auto f = [&](ull x) { ull sum = 0; if (a % b == 0) { sum += x / b; } else { sum += x / a; sum += x / b; sum -= x / lcm(a, b); } return (x - sum) >= k; }; ull l = 0, r = 2e18 + 10; while (r - l > 1) { ull m = (l + r) / 2; if (f(m)) r = m; else l = m; } // cout << check() << endl; // cout << f(15) << endl; cout << r << endl; } int main(void) { int t; cin >> t; while (t--) solve(); return 0; }