public int NthSuperUglyNumber(int n, int[] primes) { if(n == 1){ return 1; } if(primes == null || !primes.Any()){ return 1;} if(primes.Length == 1){ return (int)Math.Pow(primes[0],(n-1)); } var uglies = new int[n]; uglies[0] = 1; var c = 1; var poss = new Possibilities(primes); while(c < n){ var m = poss.GetMin(); var prime = m.GetPrime(uglies); var index = m.UglyIndex; var possibility = m.Value; if(possibility != uglies[c-1]){ uglies[c++] = possibility; } poss.Set(prime,index+1, uglies[index+1] * prime); } return uglies.Last(); }
public int NthSuperUglyNumber(int n, int[] primes) { if(n == 1){ return 1; } if(primes == null || !primes.Any()){ return 1;} if(primes.Length == 1){ return (int)Math.Pow(primes[0],(n-1)); } var uglies = new int[n]; uglies[0] = 1; var c = 1; var poss = new Possibilities(primes); while(c < n){ List<int> prs; uglies[c++] = poss.GetMin(out prs); foreach(var p in prs){ var i = poss.Get(p); poss.Set(p,i+1, uglies[i+1] * p); } //Console.WriteLine(poss.ToString()); } //Console.WriteLine(String.Join(",", uglies)); return uglies.Last(); }