POJ 2247 (丑数的产生方法)

来源:互联网 发布:淘宝账号账号 编辑:程序博客网 时间:2024/05/10 19:56


所谓丑数,就是不能被2,3,5,7以外的其他素数整除的数。1,2,3,4,5,6,7,8,9,10,12,14,15,16,18是最前面的15个丑数。


此处主要是怎么打表:

#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int main(){    freopen("in.txt","r",stdin);    __int64 a[5843],x1,x2,x4,x3;    a[1] = 1;    x1 = x2 = x3 = x4 = 1;    for(int i = 1;i <= 5842; ){  //要点        a[++i] = min(min(a[x1]*2,a[x2]*3),min(a[x3]*5,a[x4]*7));        if(a[i] == a[x1]*2) x1++;        if(a[i] == a[x2]*3) x2++;        if(a[i] == a[x3]*5) x3++;        if(a[i] == a[x4]*7) x4++;    }    string s;    sort(a+1,a+5841);    int n;    while(cin>>n&&n)    {            if(n%10==1&&n%100!=11)            s="st";            else if(n%10==2&&n%100!=12)            s="nd";            else if(n%10==3&&n%100!=13)            s="rd";            else s="th";        cout<<"The "<<n<<s<<" humble number is "<<a[n]<<"."<<endl;    }    return 0;}


0 0