超级素数(sprime)

 超级素数(sprime)

题目描述

超级素数是指一个素数,每去掉后面一个数字,总能保证剩下的数为质数,例如:
373->37->3
这是一个长为3的超级素数。

输入

输入一个整数n (10≤n≤108)。

输出

从小到大输出所有小于等于n的超级素数,每个超级素数之间留一个空格。末尾也有一个空格

样例输入

10

样例输出

2 3 5 7 
仔细一想, 第一位肯定是2, 3, 5 ,7 这四个素数, 然后继续添加, 只能添加1, 3, 7, 9 为啥,,自己想, 判断为素数后,继续添加1, 3 ,7 , 9, 如此循环。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <climits>
using namespace std;
 
const int maxn = 10010;
const int INF = 0x3f3f3f3f;
int a[maxn];
int n;
int ans = 4;
int cnt = 0, m;
void bfs(int n) {
    int flag = 1;
    for(int i = 2; i * i <= n; i++) {
        if(n % i == 0) {
            flag = 0;
            break;
        }
    }
    if(flag) {
            a[cnt++] = n;
        if(n*10 + 3 <= m) {
            bfs(n*10+3);
        }
        if(n*10 + 1 <= m) {
            bfs(n*10+1);
        }
        if(n*10 + 7 <= m) {
            bfs(n*10+7);
        }
        if(n*10 + 9 <= m) {
            bfs(n*10+9);
        }
 
    }
}
int main() {
    scanf("%d", &m);
    if(m >= 2)
    bfs(2);
    if(m >= 3)
    bfs(3);
    if(m >= 5)
    bfs(5);
    if(m >= 7)
    bfs(7);
    sort(a, a+cnt);
    for(int i = 0; i < cnt; i++){
    printf("%d ", a[i]);
    }
    printf("\n");
   return 0;
}
View Code

 

posted on 2016-07-30 09:33  disppr  阅读(1096)  评论(0编辑  收藏  举报