#include #define endl '\n' using namespace std; const int maxn = 350010; void speed() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); } long long sieve[maxn]; vector < long long > primes; long long x; double goal, revgoal; /// bavno bool cmp(pair < long long, double > p1, pair < long long, double > p2) { return (p1.second < p2.second); } double curr_under, curr_upper; double fract2(double upper) { curr_upper = upper; double f = (double)(curr_upper / curr_under); double dist = abs(f - goal); return dist; } pair < long long, double > tern2(long long l, long long r) { double ans = curr_under * goal; long long ansint = ans; vector < pair < long long, double > > g; for (int i = max(l,ansint-1); i <= min(r, ansint+1); i ++) { g.push_back(make_pair(i, fract2(i))); } if(g.size() == 0)return make_pair(0, (double)(1)); sort(g.begin(), g.end(), cmp); return g[0]; } /// double razlikabyrzo(double up, double down) { double f = (double)(up/down); double dist = abs(f - goal); return dist; } void solve_test() { double eq = 0.000001; cin >> x; double dec = x; dec /= 1000000; goal = dec; double one = 1; revgoal = one/goal; for (int under = 350000-1; under >= 349950; -- under) { curr_under = under; pair < long long, double > res = tern2(1, under); double dist = res.second; double ans = (double)((double)(res.first) / (double)(under)); double rounddown = (round(ans * 1000000)) / 1000000; if(dist < eq && (rounddown == goal)) { cout << res.first << " " << under << endl; return; } } long long lup = 0, ldown = 1, rup = 1, rdown = 1; while(true) { double mid = (double)(lup + rup) / (double)(ldown + rdown); if(lup + rup >= 350000 || ldown + rdown >= 350000)break; if(mid < goal) { lup = lup + rup; ldown = ldown + rdown; } else { rup = lup + rup; rdown = ldown + rdown; } } vector < pair < long long, double > > g; double diffl = razlikabyrzo(lup, ldown); double diffr = razlikabyrzo(rup, rdown); if(diffl < diffr) { cout << lup << " " << ldown << endl; double ans = (double)((double)(lup) / (double)(ldown)); } else { cout << rup << " " << rdown << endl; double ans = (double)((double)(rup) / (double)(rdown)); /// cout << ans << endl; } } int main() { freopen("fantasy.in", "r", stdin); freopen("fantasy.out", "w", stdout); speed(); //run(); int t; cin >> t; while(t --) { solve_test(); } return 0; }