#include #include #include #include #include using namespace std; using ll = long long; #define int ll namespace std{ template struct hash> { size_t operator () (const pair & a) const { return std::hash()(a.first) ^ (std::hash()(a.second) << 10); } }; } ll pascal (ll n, ll k) { static unordered_map, ll> triangle; pair key = { n, k }; if (n == 0 || k == 0 || k == n) return 1; if (triangle.count(key)) { return triangle[key]; } ll a = pascal(n - 1, k - 1); ll b = pascal(n - 1, k); ll newVal = a + b; if (a < 0 || b < 0 || a + b < 0) { newVal = -1; } triangle[key] = newVal; return newVal; } signed main() { unordered_map,ll> map; int count; cin >> count; for (int i = 0; i < count; ++i) { int number; cin >> number; ll overflow = -1; for (int n = 0; true; ++n) { ll startIdx = overflow == -1 ? n / 2 : overflow; ll mid = pascal(n, startIdx); if (mid != -1 && mid < number) continue; if (mid == number) { cout << n + 1 << endl; break; } for (int k = startIdx - 1; k >= 0; --k) { ll val = pascal(n, k); if (val == -1) { if (overflow == -1 || overflow > k) overflow = k; continue; } if (val == number) { cout << n + 1 << endl; goto end; } if (val < number) break; } } end:; } return 0; }