题目描述
如果一个正整数A是素数,或者A的每一位数字都是素数,我们称A为伪素数。例如,23是素数,235的每一位数字都是素数,所以23和235都是伪素数,而135不是素数,其中的数字1不是素数,所以135不是伪素数。老师给了小南一个任务,让他在一个称作伪素数列的集合An={2,3,5,7,11,13,17,19,22,23,25,…}中快速找到第k个伪素数,聪明的你能帮他完成任务吗?
输入
多组样例。每行输入一个样例包括一个正整数k(1≤k≤5000)。
输出
对每一个输入的k,输出一个正整数x,表示数列An中的第k项的值,其值范围不会超过int型。每个输出占一行。样例输入 Copy
1 5 10
样例输出 Copy
2 11 23
#include <stdio.h> #include <math.h> int isprime(int a){ int k=1,i; if(a==1) k=0; else { for(i=2;i<=sqrt(a);i++){ if(a%i==0) k=0; } } return k; } int main(void){ int i=1,x=2,k=1,a[4]={2,3,5,7},b[5005]={0}; b[0]=2; for(i=1;i<=5000;) { x++; int m=x; if(isprime(x)){ b[i]=x; i++; } else{ while(m){ k=1; if(!((m%10)==a[0]||(m%10)==a[1]||(m%10)==a[2]||(m%10)==a[3])){ k=0; break; } m/=10; } if(k){ b[i]=x; i++; } } } int t; while (scanf("%d",&t)!=EOF) { printf("%d\n",b[t-1]); } return 0; }
标签:正整数,23,int,样例,素数,输入 From: https://www.cnblogs.com/messing1758954258/p/16966169.html