码迷,mamicode.com
首页 > 其他好文 > 详细

超级素数(sprime)

时间:2016-07-30 10:32:16      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

 超级素数(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

 

超级素数(sprime)

标签:

原文地址:http://www.cnblogs.com/cshg/p/5720258.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!