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

  • 相关阅读:
    Linux| 系统管理命令
    Linux | 文件编辑命令
    Linux | 权限管理命令
    Linux | 文件管理命令
    Linux | 帮助命令
    前端性能优化之防抖、节流
    css盒子模型
    linux常用命令(持续更新)
    Vue ERROR TypeError: Cannot read property 'upgrade' of undefined
    hbuilder-x使用js-beautiful格式化代码
  • 原文地址:https://www.cnblogs.com/wally/p/2594453.html
Copyright © 2011-2022 走看看