49 我素故我在

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;
}
Yesterday is history,tomorrow ismystery,but today is a gift!That why it is called Present!
原文地址:https://www.cnblogs.com/VictorierJwr/p/12775670.html