# bzoj2440 分类： bzoj 2015-05-30 23:15 29人阅读 评论(0) 收藏

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>

const int SIZE = 2e9, MAXN = 5e4;

int k;
int u[MAXN];
int prime[MAXN], tot;
bool check[MAXN];

void PreWork()
{
u[1] = 1;

for(int i = 2; i < MAXN; i++)
{
if(!check[i]) prime[++tot] = i, u[i] = -1;

for(int j = 1, t; j <= tot && (t = prime[j]*i) < MAXN; j++)
{
check[t] = true;

if(!(i % prime[j]))
{u[t] = 0; break;}

u[t] = -u[i];
}
}
return;
}
int Calcu(int x)
{
int ret = 0;
for(int i = 1; i*i <= x; i++)
ret += x/(i*i)*u[i];
return ret;
}
void Solve()
{
scanf("%d",&k);

int l = 1, r = k<<1;

//  f[l] < k <= f[r]
if(Calcu(l) >= k)
printf("%d\n",l);
else
{
while(l + 1 != r)
{
int mid = ((long long)l + r)>>1;
if(k <= Calcu(mid))
r = mid;
else
l = mid;
}
printf("%d\n",r);
}
}

int main()
{
int T;

#ifndef ONLINE_JUDGE
freopen("bzoj2440.in","r",stdin);
freopen("bzoj2440.out","w",stdout);
#endif

PreWork();

scanf("%d",&T);

while(T--) Solve();

#ifndef ONLINE_JUDGE
fclose(stdin);
fclose(stdout);
#endif
return 0;
}

posted @ 2015-05-30 23:15    阅读(121)  评论(0编辑  收藏  举报