Solution of 136 - Ugly Numbers

Problem Description
source:https://uva.onlinejudge.org/external/1/136.html

Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 
          1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, ... 
shows the first 11 ugly numbers. By convention, 1 is included. 
         Write a program to find and print the 1500’th ugly number. 

Input 

There is no input to this program. 

Output 

Output should consist of a single line as shown below, with ‘’ replaced by the number computed. 

Sample Output 

The 1500'th ugly number is <number>.

Solution:
#include<stdio.h>
#define min(a,b)  (a<b? a:b)

long ugly[1502],x,y,z;
void UglyGen()
{
    int a,b,c,n;
    ugly[1]=a=b=c=n=1;
    while(n!=1500)
    {
        x=2*ugly[a];
        y=3*ugly[b];
        z=5*ugly[c];
        ugly[++n]=min(x,min(y,z));
        if(ugly[n]==x)
            a++;
        if(ugly[n]==y)
            b++;
        if(ugly[n]==z)
            c++;
    }
}
int main()
{
    UglyGen();
    printf("The 1500'th ugly number is %ld.\n",ugly[1500]);
    return 0;
}
image

No comments:

Post a Comment

Write your comment - Share Knowledge and Experience