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.
Input
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.
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 0Sample Output
1 2 10
分析:打表,好笨的方法=_=.
#include<cstdio> #include<algorithm> using namespace std; long long a[30000],cnt=0; long long Pow(int x,int k) { if(k==0) return 1; if(k==1) return x; long long y=Pow(x,k/2); y*=y; if(k%2) y*=x; return y; } void f() { long long N=(long long)17592186044416; for(int i=0;i<=44;i++) { long long ans2=Pow(2,i); for(int j=0;j<30;j++) { long long ans3=Pow(3,j); for(int k=0;k<20;k++) { long long ans5=Pow(5,k); if(ans5<=N/ans2/ans3) a[cnt++]=ans2*ans3*ans5; } } } sort(a,a+cnt); } int main() { f(); int n; while(scanf("%d",&n)&&n) printf("%d ",a[n-1]); return 0; }