49 我素故我在
作者: xxx时间限制: 1S章节: 深度优先搜索
问题描述 :
有这样一种素数叫纯素数(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
code
#include<stdio.h>
#include<math.h>
int num[10][100];
int l[10];
int isp(int x)
{
if (x <= 1)
return 0;
if (x == 2)
return 1;
int lim = (int)sqrt((double)x);
for (int i = 2; i <= lim; ++i)
if (!(x % i))
return 0;
return 1;
}
void DFS(int x, int len, int cnt)
{
if (len>8)
return;
num[len][cnt] = x;
for (int i = 1; i<10; ++i)
{
if (isp(10 * x + i))
DFS(10 * x + i, len + 1, ++l[len + 1]);
}
}
int main()
{
for (int i = 2; i<10; ++i)
{
if (isp(i))
DFS(i, 1, ++l[1]);
}
int n;
scanf("%d", &n);
for (int i = 0; i < n;i++)
{
int m;
scanf("%d", &m);
for (int i = 1; i <= l[m]; ++i)
printf("%d
", num[m][i]);
}
return 0;
}