#include <iostream>
using namespace std;
//solution1***********************************************
//function to get the min number
int Min(int num1,int num2,int num3){
int min=(num1<num2)?num1:num2;
min=(min<num3)?min:num3;
return min;
}
//function to return the indexth ugly num
int UglyNum(int index){
if(index<1) return 0;
int *UglyArray=new int [index];
UglyArray[0]=1;
int count=1;
int *Ugly2=UglyArray,*Ugly3=UglyArray,*Ugly5=UglyArray;
while(count<index){
UglyArray[count]=Min(*Ugly2*2,*Ugly3*3,*Ugly5*5);
while(*Ugly2*2<=UglyArray[count])
Ugly2++;
while(*Ugly3*3<=UglyArray[count])
Ugly3++;
while(*Ugly5*5<=UglyArray[count])
Ugly5++;
count++;
}
int res=UglyArray[index-1];
delete[] UglyArray;
return res;
}
//solution2**********************************************
bool isUglyNum(int n){
bool res=false;
while(n%2==0){
n/=2;
}
while(n%3==0){
n/=3;
}
while(n%5==0){
n/=5;
}
if(n==1)
res=true;
return res;
}
int UglyNum_2(int index){
if(index<1) return 0;
int count=0;
int n=0;
while(count<index){
n++;
if(isUglyNum(n))
count++;
}
return n;
}
int main(){
for(int i=1;i<10;++i){
cout<<UglyNum(i)<<' ';
}
cout<<UglyNum(1500)<<' ';
cout<<UglyNum_2(1500)<<' ';
}