# Ugly Number in C++

Ugly numbers are those numbers whose prime factors are 2, 3 or 5. From 1 to 15, there are 11 ugly numbers 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15. The numbers 7, 11, 13 are not ugly because they are prime. The number 14 is not ugly because in its prime factor the 7 will come. So suppose we want to check the 10th ugly number. The value will be 12.

Let us see the following algorithm to get an idea −

## Algorithm

getUglyNumbers(n)

Input − The number of terms.

Output − Find nth Ugly numbers.

Begin
define array named uglyNum of size n
i2 := 0, i3 := 0, i5 := 0
next2mul := 2, next3mul := 3, next5Mul := 5
next := 1
ugluNum[0] := 1
for i := 1 to n, do
next := minimum of next2Mul, next3Mul and next5Mul
uglyNum[i] := next
if next = next2Mul, then
i2 := i2 + 1
next2mul := uglyNum[i2] * 2
if next = next3Mul, then
i3 := i3 + 1
next3mul := uglyNum[i3] * 3
if next = next5Mul, then
i5 := i5 + 1
next5mul := uglyNum[i5] * 5
done
return next
End

## Example (C++)

Live Demo

# include<iostream>
using namespace std;
int min(int x, int y, int z){ //find smallest among three numbers
if(x < y){
if(x < z)
return x;
else
return z;
}
else{
if(y < z)
return y;
else
return z;
}
}
int getUglyNum(int n){
int uglyNum[n]; // To store ugly numbers
int i2 = 0, i3 = 0, i5 = 0;
//find next multiple as 1*2, 1*3, 1*5
int next2mul = 2;
int next3mul = 3;
int next5mul = 5;
int next = 1; //initially the ugly number is 1
uglyNum[0] = 1;
for (int i=1; i<n; i++){
next = min(next2mul, next3mul, next5mul); //find next ugly number
uglyNum[i] = next;
if (next == next2mul){
i2++; //increase iterator of ugly numbers whose factor is 2
next2mul = uglyNum[i2]*2;
}
if (next == next3mul){
i3++; //increase iterator of ugly numbers whose factor is 3
next3mul = uglyNum[i3]*3;
}
if (next == next5mul){
i5++; //increase iterator of ugly numbers whose factor is 5
next5mul = uglyNum[i5]*5;
}
}
return next; //the nth ugly number
}
int main(){
int n;
cout << "Enter term: "; cin >> n;
cout << n << "th Ugly number is: " << getUglyNum(n)<< endl;
}

## Input

10

## Output

Enter term: 10
10th Ugly number is: 12

Updated on: 28-Apr-2020

714 Views