问第k大的无平方因子数,二分求[1,x]中有多少无平方因子数,根据容斥原理, Q=x-x内有一个平方因子的数+x内有两个平方因子的数.. =x-x内(4的倍数个数+9的倍数的个数+25的倍数的个数)+x内(36(2*3*2*3)的倍数+100(2*5*2*5)的倍数)…,刚好莫比乌斯函数对于奇数个质数相乘的数是-,偶数个质数相乘的数是+,所以枚举i,让i的平方 < n,[1,x]中有i的平方的数就是n/(i*i)再把ER它诚意mu[i]加起来就行了
#include<cstdio>
#include<cstring>
#include<cmath>
#define maxl 100001
long long n,k,t,ans;
long long no[maxl],p[maxl],mu[maxl];
void shai()
{
mu[1]=1;
for(long long i=2;i<maxl;i++)
{
if(!no[i])
p[++p[0]]=i,mu[i]=-1;
long long j=1,t=p[1]*i;
while(j<=p[0] && t<maxl)
{
no[t]=1;
if(i%p[j]==0)
{
mu[t]=0;
break;
}
mu[t]=-mu[i];
t=i*p[++j];
}
}
}
void prework()
{
scanf("%lld",&k);
}
long long qiu(long long x)
{
long long l=sqrt(x),sum=0;
for(long long i=1;i<=l;i++)
sum+=mu[i]*(x/(i*i));
return sum;
}
void mainwork()
{
long long l=1,r=1700000000,mid,num;
while(l<=r)
{
mid=(l+r)/2;
num=qiu(mid);
// if(num==k)
// break;
if(num>=k)
r=mid-1,ans=mid;
else
l=mid+1;
}
// ans=mid;
}
void print()
{
printf("%lld\n",ans);
}
int main()
{
shai();
scanf("%lld",&t);
for(long long i=1;i<=t;i++)
{
prework();
mainwork();
print();
}
return 0;
}