问题描述 :
有这样一种素数叫纯素数(YY出来的名字),当它是一个多位数的时候,你把它的末位去掉之后余下的数依然是一个素数。比如说2393,2393 本身是一个素数,它的末位去掉之后,余下的是239。239 是一个素数,它的末位去掉之后,余下的是23 。23是一个素数,它的末位去掉之后,余下的是2 。2依然还是一个素数。纯素数的长度叫做“维”。2393 是一个4维素数。3797也是一个4维素数。
输入说明 :
第一行先给出一共有多少组数据N(N<=1000),接下来有N组数据.
每组包括一个整数T(1<=T<=8)。
输出说明 :
按照从小到大的顺序输出所有的T维纯素数。
输入范例 :
3
8
1
4
输出范例 :
23399339
29399999
37337999
59393339
73939133
2
3
5
7
2333
2339
2393
2399
2939
3119
3137
3733
3739
3793
3797
5939
7193
7331
7333
7393
c源码:
注:常规做法到7就崩了,参考大神的深度遍历
#include<stdio.h>
#include<math.h>
int primeNums[9][1000];
int len[9]={0};
int fun(int n)//是否为质数
{
int i;
if(n==1)
return 0;
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
return 0;
}
return 1;
}
void DFS(int num,int dimension,int count);
int main(){
int n,t,i;
for(i=2;i<10;i++){
if(fun(i)){
DFS(i,1,++len[1]);
}
}
scanf("%d",&n);
while(n--){
scanf("%d",&t);
for(i=1;i<=len[t];i++){
printf("%d\n",primeNums[t][i]);
}
}
return 0;
}
void DFS(int num,int dimension,int count){
int i;
if (dimension > 8) {
return ;
}
primeNums[dimension][count]=num;
for(i=1;i<10;i++){
if(fun(10*num+i)){
DFS(10*num+i,dimension+1,++len[dimension+1]);
}
}
}