南邮 OJ 1732 还是质数

还是质数

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 83            测试通过 : 36 

比赛描述

农民约翰的母牛总是产生最好的肋骨。你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们。农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组成一个质数,举例来说: 7 3 3 1 全部肋骨上的数字 7331是质数;三根肋骨 733是质数;二根肋骨 73 是质数;当然,最后一根肋骨 7 也是质数。 7331 被叫做长度 4 的特殊质数。写一个程序对给定的肋骨的数目 N (1<=N<=8),求出所有的特殊质数。数字1不被看作一个质数。



输入

多组输入数据

单独的一行包含N。

输出

按顺序输出长度为 N 的特殊质数,每行一个。

样例输入


样例输出

2333
2339
2393
2399
2939
3119
3137
3733
3739
3793
3797
5939
7193
7331
7333
7393

提示

undefined

题目来源

ym






#include

bool isPrime(int n){
	for(int i = 3; i * i <= n; i += 2){
		if(n % i == 0){
			return 0;
		}
	}
	return 1;
}

int n;
int head[] = {2, 3, 5, 7};	// 第一个数字可能的取值
int tail[] = {1, 3, 7, 9};	// 最后一个数字可能的取值

void dfs(int num, int len){
	if(len == n){
		printf("%d\n", num);
		return;
	}
	int temp;
	++len;
	for(int i = 0; i < 4; ++i){
		temp = num * 10 + tail[i];
		if(isPrime(temp)){
			dfs(temp, len);
		}
	}
}

int main(){
	while(scanf("%d", &n) == 1){
		for(int i = 0; i < 4; ++i){
			dfs(head[i], 1);
		}
	}
}



你可能感兴趣的:(南邮,OJ)