hdu 1058 Humble Numbers

本文介绍了一个寻找特定序列——谦逊数的方法。通过算法预计算出一定范围内的谦逊数,并提供了一个程序来输出用户指定位置的谦逊数。谦逊数是指只包含2、3、5、7作为质因数的正整数。

通过不断的寻找2^a*3^b*5^c*7^d按顺序的数就可以了……

#include <iostream>
#include <cmath>
using namespace std;
__int64
ans[6000];
int
find(int a,int b,int c,int d)
{

    int
aa=a>b?b:a;
    int
bb=c>d?d:c;
    return
aa>bb?bb:aa;
}
   
void
init()
{

    int
a,b,c,d,min,a1,b1,c1,d1;
    a=b=c=d=0;
    ans[0]=1;
    for
(int i=1;i<=5842;i++)
    {

        min=find(a1=ans[a]*2,b1=ans[b]*3,c1=ans[c]*5,d1=ans[d]*7);
        ans[i]=min;
        if
(min==a1)a++;
        if
(min==b1) b++;
        if
(min==c1) c++;
        if
(min==d1) d++;
    }
}

int
main()
{

    int
n;
    init();
    while
(scanf("%d",&n),n)
    {

        if
(n%10==1&&n%100!=11)
            printf("The %dst humble number is %d.\n",n,ans[n-1]);
        else if
(n%10==2&&n%100!=12)
            printf("The %dnd humble number is %d.\n",n,ans[n-1]);
        else if
(n%10==3&&n%100!=13)
            printf("The %drd humble number is %d.\n",n,ans[n-1]);
        else
printf("The %dth humble number is %d.\n",n,ans[n-1]);
    }

    return
0;
}

转载于:https://www.cnblogs.com/xin-hua/archive/2013/05/22/3093632.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值