题意:
一个数的质因子如果只是2,3,5,7中的若干个。则这个数叫做humble number。
例如:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, ...
给n,问第n个humble number是多少。
思路:
所有的humble数的构造都是:(2^a)*(3^b)*(5^c)*(7^d)。a,b,c,d大于等于0。
X=a+b+c+d代表这个数是第X个humble数。
假设前i-1个humble数已经求出来了,第i个humble数如何求呢?
一定是前i-1个humble数中的某个humble数乘以2或乘以3或乘以5或乘以7得到的。
好了,枚举前i-1个humble数,找出大于第i-1个humble数并且是最小,那么它就是第i个humble数了。
看代码
代码:
ll a[5850]; int cn=0; int main(){ a[1]=1; cn=1; while(cn<5842){ ll ans=INF; ll temp; rep(i,1,cn){ temp=a[i]*2; if(temp>a[cn]) ans=min(ans,temp); temp=a[i]*3; if(temp>a[cn]) ans=min(ans,temp); temp=a[i]*5; if(temp>a[cn]) ans=min(ans,temp); temp=a[i]*7; if(temp>a[cn]) ans=min(ans,temp); } a[++cn]=ans; } int n; while(scanf("%d",&n),n){ int t=n%10; if(t==1 && n%100!=11){ printf("The %dst humble number is ",n); } else if(t==2 && n%100!=12){ printf("The %dnd humble number is ",n); } else if(t==3 && n%100!=13){ printf("The %drd humble number is ",n); } else{ printf("The %dth humble number is ",n); } printf("%I64d. ",a[n]); } return 0; }