(3) 0 < k ≤ 100, 0 < n ≤ 106, 0 < primes[i] < 1000.
#include "stdafx.h" #include<vector> #include<iostream> using namespace std; class Solution { public: bool is_ugly(int num,vector<int> primes) { int k=0; while(k!=primes.size()) { while(num%primes[k]==0) { num/=primes[k]; } k++; if(num==1) return true; } return false; } int findnext(int tt,vector<int> primes,bool f) { bool flag=false; if(!f) while(!flag) { ++tt; flag=is_ugly(++tt,primes); } else while(!flag) { flag=is_ugly(++tt,primes); } return tt; } int nthSuperUglyNumber(int n, vector<int>& primes) { if(n==1) return 1; if(n==2) return primes[0]==1?primes[1]:primes[0]; vector<int>nums; nums.push_back(1); int k=1; bool f=false; if(primes[0]==2) f=true; while(k!=n) { nums.push_back(findnext(nums.back(),primes,f)); k++; } return nums.back(); } }; int _tmain(int argc, _TCHAR* argv[]) { Solution sl; int aa[30]={7,19,29,37,41,47,53,59,61,79,83,89,101,103,109,127, 131,137,139,157,167,179,181,199,211,229,233,239,241,251}; vector<int>primes(aa,aa+30); cout<<sl.nthSuperUglyNumber(100000,primes); system("pause"); return 0; }
Time Limit Exceeded