Ugly Numbers
Time Limit: 1000ms
Memory Limit: 10000KB
This problem will be judged on
PKU. Original ID:
1338
64-bit integer IO format: %lld Java class name: Main
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, ...
shows the first 10 ugly numbers. By convention, 1 is included.
Given the integer n,write a program to find and print the n'th ugly number.
1, 2, 3, 4, 5, 6, 8, 9, 10, 12, ...
shows the first 10 ugly numbers. By convention, 1 is included.
Given the integer n,write a program to find and print the n'th ugly number.
Input
Each line of the input contains a postisive integer n (n <= 1500).Input is terminated by a line with n=0.
Output
For each line, output the n’th ugly number .:Don’t deal with the line with n=0.
Sample Input
1 2 9 0
Sample Output
1 2 10
Source
#include<iostream>
#include<queue>
#include<set>
#include<vector>
using namespace std;
typedef long long LL;
int a[3]={2,3,5};
int main()
{
priority_queue<LL,vector<LL>,greater<LL> > pq;
set<LL> st;
pq.push(1);
st.insert(1);
for(int i=1;;i++)
{
LL x=pq.top();
pq.pop();
if(i==1500)
cout<<x<<endl;
for(int j=0;j<3;j++)
{
if(!st.count(a[j]*x))
{
st.insert(a[j]*x);
pq.push(a[j]*x);
}
}
}
}