PKU 3307 Smart Sister

http://poj.org/problem?id=3307
ある数字xがある。
このxに含まれる桁を全てかけ算して得られた数字をiとする。
例えば、
x=972なら i=9*7*2=126
x=126なら i=1*2*6=12

全ての数字xから得られた数字iの集合をSとして、入力nが与えられたときに、Sの中で小さい方からn番目のiを答えるというような問題。

もし、iがSに含まれるなら、そのiは因数として10以上の素数を持たないので、因数として2,3,5,7を持つ数字を小さい方から列挙していく。

vector<ll> ans;
set<ll> app;

ll mu[]={2,3,5,7};

main(){
  priority_queue<ll>q;
  q.push(-1);
  
  while(!q.empty()){
    ll n=-q.top();q.pop();
    if(n>=1000000000000000000LL)break;
    if(app.count(n))continue;
    app.insert(n);
    ans.pb(n);
    rep(i,4){
      ll ne=n*mu[i];
      if(app.count(ne))continue;
      if(ne>=1000000000000000000LL)break;
      q.push(-ne);
    }
  }
  int T;
  cin>>T;
  int n;
  while(T--)cin>>n,cout<<ans[n-1]<<endl;
}