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位整型,就会溢出,貌似感觉没有超呀,不知道是咋回事,求大神解释、、、、