Ugly Numbers
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 21878 | Accepted: 9772 |
Description
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
New Zealand 1990 Division I,UVA 136
#include <iostream>
#include <cstring>
#include <iomanip>
#include <stdio.h>
#include <cmath>
#include <algorithm>
using namespace std;
int main()
{
long long n=0,m,i,j,k,l=1000000000,a[100000];//数组不能开得太大不然容易越界
memset(a,0,sizeof(a));
a[0]=1;
for(i=1; i<l; i*=2)
for(j=1; i*j<l; j*=3)
for(k=1; i*j*k<l; k*=5)
{
++n;
a[n]=i*j*k;
}
sort(a,a+n+1);
while(cin>>m&&m!=0)
{
cout<<a[m]<<endl;
}
return 0;
}
基准时间限制:1 秒 空间限制:131072 KB 分值: 10
难度:2级算法题
K的因子中只包含2 3 5。满足条件的前10个数是:2,3,4,5,6,8,9,10,12,15。
所有这样的K组成了一个序列S,现在给出一个数n,求S中 >= 给定数的最小的数。
例如:n = 13,S中 >= 13的最小的数是15,所以输出15。
Input
第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 10000) 第2 - T + 1行:每行1个数N(1 <= N <= 10^18)
Output
共T行,每行1个数,输出>= n的最小的只包含因子2 3 5的数。
Input示例
5 1 8 13 35 77
Output示例
2 8 15 36 80
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <vector> #include <queue> #include <map> #include <set> #include <algorithm> //#define INF 0xfffffff using namespace std; typedef long long ll; #define INF 1e18+100 #define MAXN 1000000 ll a[MAXN]; int cnt = 0; void Init() { cnt = 0; for(ll i=1; i<INF; i*=2) for(ll j=1; j*i<INF; j*=3) for(ll k=1; i*j*k<INF; k*=5) a[cnt++] = i*j*k; } int main() { #ifdef ONLINE_JUDGE #else freopen("G:/x/read.txt","r",stdin); freopen("G:/x/out.txt","w",stdout); #endif ios::sync_with_stdio(false); cin.tie(0); Init(); sort(a, a+cnt); int t; cin>>t; while(t--) { ll n; cin>>n; cout<<a[lower_bound(a+1,a+cnt+1,n)-a]<<endl; } return 0; } /** 5 1 8 13 35 77 **/