/*
f[1] = 1;
f[2] = min(f[1]*2,f[1]*3,f[1]*5,f[1]*7) = 2;
f[3] = min(f[2]*2,f[1]*3,f[1]*5,f[1]*7) = 3;
f[4] = min(f[2]*2,f[2]*3,f[1]*5,f[1]*7) = 4;
f[5] = min(f[3]*2,f[2]*3,f[1]*5,f[1]*7) = 5;
f[6] = min(f[3]*2,f[2]*3,f[2]*5,f[1]*7) = 6;
| |
f[7] = min(f[4]*2,f[3]*3,f[2]*5,f[1]*7) = 7;
f[8] = min(f[4]*2,f[3]*3,f[2]*5,f[2]*7) = 8;
f[9] = min(f[5]*2,f[3]*3,f[2]*5,f[2]*7) = 9;
f[10] = min(f[5]*2,f[4]*3,f[2]*5,f[2]*7) = 10;
| |
f[11] = min(f[6]*2,f[4]*3,f[3]*5,f[2]*7) = 12;
............
*/
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int min_num(int a,int b,int c,int d)
{
a = a<b?a:b;
c = c<d?c:d;
return a<c?a:c;
}
int main()
{
int f[5900];
int n;
f[1] = 1;
int l,k,m,s;
l=1;k=1;m=1;s=1;
for(int i=2;i<=5842;i++)
{
f[i] = min_num(f[l]*2,f[k]*3,f[m]*5,f[s]*7);
if(f[i] == f[l]*2)
l++;
if(f[i] == f[k]*3)
k++;
if(f[i] == f[m]*5)
m++;
if(f[i] == f[s]*7)
s++;
}
while(scanf("%d",&n),n!=0)
{
if(n%10==1 && n%100!=11)
printf("The %dst humble number is %d.\n",n,f[n]);
else if(n%10==2 && n%100!=12)
printf("The %dnd humble number is %d.\n",n,f[n]);
else if(n%10==3 && n%100!=13)
printf("The %drd humble number is %d.\n",n,f[n]);
else
printf("The %dth humble number is %d.\n",n,f[n]);
}
//printf("%d",min_num(87,9,7,7));
return 0;
}