#line 2 "/home/shogo314/cpp_include/ou-library/io.hpp" /** * @file io.hpp * @brief 空白区切り出力、iostreamのオーバーロード */ #include #include #include #include #include namespace tuple_io { template std::basic_istream& read_tuple(std::basic_istream& is, Tuple& t) { is >> std::get(t); if constexpr (I + 1 < std::tuple_size_v) { return read_tuple(is, t); } return is; } template std::basic_ostream& write_tuple(std::basic_ostream& os, const Tuple& t) { os << std::get(t); if constexpr (I + 1 < std::tuple_size_v) { os << CharT(' '); return write_tuple(os, t); } return os; } }; template std::basic_istream& operator>>(std::basic_istream& is, std::pair& p) { is >> p.first >> p.second; return is; } template std::basic_istream& operator>>(std::basic_istream& is, std::tuple& p) { return tuple_io::read_tuple, 0>(is, p); } template std::basic_istream& operator>>(std::basic_istream& is, std::array& a) { for(auto& e : a) is >> e; return is; } template std::basic_istream& operator>>(std::basic_istream& is, std::vector& v) { for(auto& e : v) is >> e; return is; } template std::basic_ostream& operator<<(std::basic_ostream& os, const std::pair& p) { os << p.first << CharT(' ') << p.second; return os; } template std::basic_ostream& operator<<(std::basic_ostream& os, const std::tuple& p) { return tuple_io::write_tuple, 0>(os, p); } template std::basic_ostream& operator<<(std::basic_ostream& os, const std::array& a) { for(size_t i = 0; i < N; ++i) { if(i) os << CharT(' '); os << a[i]; } return os; } template std::basic_ostream& operator<<(std::basic_ostream& os, const std::vector& v) { for(size_t i = 0; i < v.size(); ++i) { if(i) os << CharT(' '); os << v[i]; } return os; } /** * @brief 空行出力 */ void print() { std::cout << '\n'; } /** * @brief 出力して改行 * * @tparam T 型 * @param x 出力する値 */ template void print(const T& x) { std::cout << x << '\n'; } /** * @brief 空白区切りで出力して改行 * * @tparam T 1つ目の要素の型 * @tparam Tail 2つ目以降の要素の型 * @param x 1つ目の要素 * @param tail 2つ目以降の要素 */ template void print(const T& x, const Tail&... tail) { std::cout << x << ' '; print(tail...); } #line 1 "/home/shogo314/cpp_include/sh-library/base.hpp" #include using namespace std; using ll = long long; using str = string; using pl = pair; template using ml = map; using mll = map; using sl = set; using ld = long double; using pd = pair; template using vec = vector; template using vv = vector>; template using vvv = vector>>; template using vp = vector>; using vl = vec; using vvl = vv; using vs = vec; using vc = vec; using vpl = vec; using spl = set; using vd = vec; using vpd = vec; template using ary = array; template using al = array; template using aal = array, N1>; template using val = vec>; #define all(obj) (obj).begin(), (obj).end() #define reps(i, a, n) for (ll i = (a); i < ll(n); i++) #define rep(i, n) reps(i, 0, n) #define rrep(i, n) reps(i, 1, n + 1) #define repds(i, a, n) for (ll i = (n - 1); i >= (a); i--) #define repd(i, n) repds(i, 0, n) #define rrepd(i, n) repds(i, 1, n + 1) #define rep2(i, j, x, y) rep(i, x) rep(j, y) template inline bool chmin(T1 &a, T2 b) { if (a > b) { a = b; return true; } return false; } template inline bool chmax(T1 &a, T2 b) { if (a < b) { a = b; return true; } return false; } #define LL(x) ll x;cin >> x; #define VL(a,n) vl a(n);cin >> a; #define VS(a,n) vs a(n);cin >> a; #define STR(s) str s;cin >> s; #define VPL(a,n) vpl a(n);cin >> a; #define VAL(a,n,k) val a(n);cin >> a; #line 3 "main.cpp" void solve() { LL(A); LL(B); LL(K); ll g = A * B / gcd(A, B); ll ok = 0; ll ng = 1LL << 62; while (ng - ok > 1) { ll mid = (ok + ng) / 2; ll t = mid - (mid / A + mid / B - mid / g); if (t < K) { ok = mid; } else { ng = mid; } } print(ng); } int main() { cin.tie(nullptr); ios_base::sync_with_stdio(false); LL(T); rep(_, T) solve(); }