#floor(a^(1/k)) を求める. def Floor_Root(a,k): """floor(a^(1/k)) を求める. a:非負整数 k:正の整数 """ assert 0<=a and 0a: x-=1 return x #ceil(a^(1/k)) を求める. def Ceil_Root(a,k): """ceil(a^(1/k)) を求める. a:非負整数 k:正の整数 """ assert 0<=a and 00) [Output] 存在しない : None 存在する : b^k=a を満たす b """ a_abs=abs(a) if a: sgn=a//a_abs else: sgn=0 b=Floor_Root(a_abs,k) if pow(sgn*b,k)==a: return sgn*b else: return None def Binary_Search_Small_Count(A,x,equal=False,sort=False): """2分探索によって,x未満の要素の個数を調べる. A:リスト x:調べる要素 sort:ソートをする必要があるかどうか(Trueで必要) equal:Trueのときはx"未満"がx"以下"になる """ if sort: A.sort() if len(A)==0 or A[0]>x or ((not equal) and A[0]==x): return 0 L,R=0,len(A) while R-L>1: C=L+(R-L)//2 if A[C]1: C=L+(R-L)//2 if cond(C): R=C else: L=C return R #================================================== def check(x,K): A=Floor_Root(x,2) B=Binary_Search_Small_Count(S,x,True) return A+B>=K #================================================== Prime=[3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71] #================================================== T=int(input()) Query=[int(input()) for _ in range(T)] M=max(Query)**2 #=== 前計算 S=set() for p in Prime: for a in range(1,Floor_Root(M,p)+1): S.add(pow(a,p)) S=sorted([x for x in S if kth_Power(x,2)==None]) for K in Query: print(General_Binary_Increase_Search_Integer(1,M,lambda x:check(x,K),None))