Super Ugly Number – Extension of Ugly Number Problem

Problem:

The problem is an extension of Ugly number problem.

Problem Link : Here [Courtesy geeksforgeeks]

#include <stdio.h>
#include <iostream>

using namespace std;

int _min(int arr[],int k)
{
	int m= arr[0];
	for(int i=1;i<k;i++)
	{
		if(m>arr[i])
		m=arr[i];
	}
	return m;
}

int SuperUgly(int n,int k,int primes[])
{
	int min_val;
	int superUgly[n];
	int tmp[k];
	int prime_iterator_count[k];
	for(int i=0;i<k;i++)
		prime_iterator_count[i]=0;
	superUgly[0]=1;
	
	for(int i=1;i<n;i++)
	{
		for(int j=0;j<k;j++)
		{
			tmp[j] = superUgly[ prime_iterator_count[j] ] * primes[j];
		}
		min_val = _min(tmp,k);
		superUgly[i]=min_val;
		for(int j=0;j<k;j++)
		{
			if(min_val==tmp[j])
			prime_iterator_count[j]++;
		}
	}
	return superUgly[n-1];
}

int main()
{
	int primes[100];
	int t,n,k;
	cin>>t;
	while(t--)
	{
		cin>>n>>k;
		for(int i=0;i<k;i++)
			scanf("%d",&primes[i]);
		cout<<SuperUgly(n,k,primes)<<endl;
	}
}

 

Comments are closed.