poj 1338 丑数

大概意思是说如果一个数的所有素因子只有2、3、5,那么就称这个数为丑数(包含1)

例如1、2、3、4、5、6、8、9、10、12、、、

一开始就TEL:

其实估计到了,但还是想试一下呀,oh

 1 #include<iostream>
 2 #include<cmath>
 3 #include<cstdio>
 4 #include<cstring>
 5 using namespace std;
 6 int main()
 7 {
 8     int n;
 9     while(cin>>n&&n!=0)
10     {
11         if(n==1)cout<<1<<endl;
12         else
13         {
14             int k=1;
15             int j,i;
16             for(i=2; ;i++)
17             {
18                 j=i;
19                 while(j%2==0)j/=2;
20                 while(j%3==0)j/=3;
21                 while(j%5==0)j/=5;
22                 if(j==1)
23                 {
24                     k++;
25                     if(k==n)
26                     {
27                         cout<<i<<endl;
28                         break;
29                     }
30                 }
31             }
32         }
33     }
34     return 0;
35 }

之后算了大概有1s左右,把最大的第1500个丑数算了出来,为859963392;

于是,下面就好办了:

ac code:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 const int MAX=859963392;
 6 __int64  s[1507];
 7 int main()
 8 {
 9     int n;
10     while(cin>>n&&n!=0)
11     {
12         int m=0;
13         __int64 i,j,k;
14         int flag=false;
15         for( i=1;i<=MAX;i*=2)
16         {
17             for( j=1;j*i<=MAX;j*=3)
18             {
19                 for( k=1;k*j*i<= MAX;k*=5)
20                 {
21                     s[m++]=i*j*k;
22                     if(m>=1500)
23                     {
24                         flag=true;
25                         break;
26                     }
27                 }
28                 if(flag)break;
29             }
30             if(flag)break;
31         }
32         sort(s,s+1500);
33         cout<<s[n-1]<<endl;
34     }
35     return 0;
36 }

有一个疑问,就是不知道咋的,如果我不是定义64位整型,就会溢出,貌似感觉没有超呀,不知道是咋回事,求大神解释、、、、

posted @ 2012-07-16 23:40  ihge2k  阅读(269)  评论(0编辑  收藏  举报