voidsieve(int n){ mu[1] = 1; for (int i=2; i<=n; i++) { if (flag[i] == false) { p[++totP] = i; mu[i] = -1; } for (int j=1; j<=totP; j++) { int t = i*p[j]; if (t>n) break; flag[t] = true; if (i%p[j] == 0) break; mu[t] = -mu[i]; } } for (int i=1; i<=n; i++) mu[i] += mu[i-1]; }
ll calc(ll n){ ll ans = 0; int l = 1; while(1ll*l*l <= n) { ll buf = n/(1ll*l*l); int r = sqrt(n/buf); ans += buf*(mu[r]-mu[l-1]); l = r+1; } return ans; }
intmain(){ sieve(5e4); int T; scanf("%d", &T); while(T--) { ll K; scanf("%lld", &K); ll l = 1, r = 2*K+100; while(l<r) { ll mid = (l+r)>>1; if (calc(mid)>=K) r = mid; else l = mid+1; } printf("%lld\n", r); } return0; }