//计算丑数的思路:三指针+动态规划
//处理非丑数的思路参考自@weixin_30437337
#include <stdio.h>
#include <malloc.h>
int least(int x,int y,int z)
{
int temp = x<y?x:y;
return temp<z?temp:z;
}
int nthUglyNumber(int n){
int nums[n];
nums[0]=1;
int p = 0;
int q = 0;
int m = 0;
for(int i=1;i<n;i++)
{
nums[i]=least(nums[p]*2,nums[q]*3,nums[m]*5);
if(nums[i]==nums[p]*2)
{
p++;
}
if(nums[i]==nums[q]*3)
{
q++;
}
if(nums[i]==nums[m]*5)
{
m++;
}
}
return nums[n-1];
}
int main()
{
int n,t,i,cnt;
int a[10000];
scanf("%d",&t);
for(i=0;i<3000;i++)
a[i]=nthUglyNumber(i+1);
while(t--){
scanf("%d",&n);
cnt=0;
i=0;
while(cnt<n){//cnt标记当前已寻找到的第cnt项的非丑数
cnt+=a[i+1]-a[i++]-1;//cnt每次加上的值是每相邻两个丑数的差,这个差即这两个丑数之间包含的非丑数的个数
}//找到所要的第n项非丑数在哪两个丑数之间后退出循环
i--;//退出循环时循环内i++多了1次
cnt-=a[i+1]-a[i]-1;//从这个丑数区间的左边开始算,res[i]加上n-cnt就是第n项丑数了
printf("%d\n",a[i]+n-cnt);
}
return 0;
}