#include using namespace std; #define rep(i,n) for(long long i = 0; i < (long long)(n); i++) #define pb push_back #define all(x) (x).begin(), (x).end() template bool chmin(T1 &a, T2 b) { return b < a && (a = b, true); } template bool chmax(T1 &a, T2 b) { return a < b && (a = b, true); } template ostream &operator<<(ostream &o, const pair &v) { o << "(" << v.first << ", " << v.second << ")"; return o; } template ostream &operator<<(ostream &o, const vector &v) { if (!v.empty()) { o << '['; copy(v.begin(), v.end(), ostream_iterator(o, ", ")); o << "\b\b]"; } return o; } using ll = long long; using ld = long double; using vll = vector; using vi = vector; typedef pair P; static const double EPS = 1e-14; static const long long INF = 1e18; #define MAX_N 100005 // 整数二分探索 // f: 単調増加関数. 000111, 111111, 000000を許容する(11110000で探索したい場合は、自分でfを反転すること) // 閉区間[rl, rr]から単調関数fを満たす最小の数を返す。 // 全て1なら0を返す(定義通り)、全て0ならrr+1を返す(異常検出用)! // // xが大で1を返すような関数を作ると思うと間違えない // // O(log(range)) ll BinarySearch(ll rl, ll rr, function f) { ll lo = rl-1, ro = rr+1; while (ro - lo != 1) { ll m = (lo + ro) / 2; ((m!=rl-1&&f(m))?ro:lo)=m; } return ro; } void BinarySearchInteractive(ll rl, ll rr, function f) { while (1) { cout << "####" << endl; ll tmp; cin >> tmp; if (rl > tmp) {cout << "Out of range: too small" << endl; continue; } if (rr < tmp) {cout << "Out of range: too large" << endl; continue; } ll ret = f(tmp); cout << tmp << " : " << ret << endl; } } void BinarySearchPrint(ll rl, ll rr, function f) { for (int i = rl; i <= rr; i++) cout << f(i); cout << endl; } void BinarySearchAssert(ll rl, ll rr, function f) { bool p = false; for (int i = rl; i <= rr; i++) { bool t = f(i); if (p && !t) cerr << i << ": F NOT MONOTONIC INCREASE" << endl, exit(1); p |= t; } } // 浮動小数点二分探索 ld BinarySearchReal(ld rl, ld rr, function f) { rep(i, 200) { ld m = (rl + rr) / 2; f(m)?rr=m:rl=m; } return rl; } void BinarySearchRealInteractive(ld rl, ld rr, function f) { while (1) { cout << "####" << endl; ld tmp; cin >> tmp; if (rl > tmp) {cout << "Out of range: too small" << endl; continue; } if (rr < tmp) {cout << "Out of range: too large" << endl; continue; } ld ret = f(tmp); cout << tmp << " : " << ret << endl; } } int main(void) { int m; scanf("%d", &m); double maxerr = -INF; rep(i, m) { int a, b; scanf("%d%d", &a, &b); double t; scanf("%lf", &t); // cout << a << " " << b << " " << t << endl; if (!a) { // cout << "a=0" << endl; printf("%.12f\n", exp(pow(t, 1.0 / b))); continue; } if (!b) { // cout << "b=0" << endl; printf("%.12f\n", pow(t, 1.0 / a)); continue; } auto f = [&](ld x){return pow(x, a) * pow(log(x), b) - t > 0;}; double n = BinarySearchReal(1e-12, 11, f); printf("%.12f\n", n); // double err = pow(n, a) * pow(log(n), b) - t; // cout << err << endl; } return 0; }