还是质数
时间限制(普通/Java) :
1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 83 测试通过 : 36
总提交 : 83 测试通过 : 36
比赛描述
农民约翰的母牛总是产生最好的肋骨。你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们。农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组成一个质数,举例来说: 7 3 3 1 全部肋骨上的数字 7331是质数;三根肋骨 733是质数;二根肋骨 73 是质数;当然,最后一根肋骨 7 也是质数。 7331 被叫做长度 4 的特殊质数。写一个程序对给定的肋骨的数目 N (1<=N<=8),求出所有的特殊质数。数字1不被看作一个质数。
输入
多组输入数据
单独的一行包含N。
输出
按顺序输出长度为 N 的特殊质数,每行一个。
样例输入
4
样例输出
2333
2339
2393
2399
2939
3119
3137
3733
3739
3793
3797
5939
7193
7331
7333
7393
提示
undefined
题目来源
ym
#include<iostream>
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);
}
}
}