题意:素因子中只有2 3 5 7的数称为谦逊的数,1也是谦逊的数,题目中已经给出了前20个谦逊的数。给定数字n,按格式输出第n个谦逊的数。
题解:打表即可,注意打表的技巧就行了。
ps:这道题和去年多校做过的一道题很像,那道题是输出大于等于n的第一个数,附上链接:传送门。
#include <cstdio> #include <iostream> using namespace std; #define N 6005 typedef long long ll; ll data[N]; int cnt,n; void get() { cnt=2; data[1]=1; int p2=1,p3=1,p5=1,p7=1; for(int i=2; i<=6000; i++) { data[i]=min(min(data[p2]*2,data[p3]*3),min(data[p5]*5,data[p7]*7)); if(data[i]==data[p2]*2) p2++; if(data[i]==data[p3]*3) p3++; if(data[i]==data[p5]*5) p5++; if(data[i]==data[p7]*7) p7++; } } int main() { get(); while(scanf("%d",&n)&&n) { printf("The %d",n); if(n%100!=11&&n%10==1) printf("st"); else if(n%100!=12&&n%10==2) printf("nd"); else if(n%100!=13&&n%10==3) printf("rd"); else printf("th"); printf(" humble number is "); printf("%lld. ",data[n]); } return 0; }