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; }