超级素数(sprime)

超级素数(sprime)

题目描述

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

输入

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

输出

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

样例输入

10

样例输出

2 3 5 7 
分析:素数生成,第一位是2,3,5,7,以后的可以加1,3,7,9;
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <climits>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <vector>
#include <list>
#include <ext/rope>
#define rep(i,m,n) for(i=m;i<=n;i++)
#define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)
#define vi vector<int>
#define pii pair<int,int>
#define mod 1000000007
#define inf 0x3f3f3f3f
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define ll long long
#define pi acos(-1.0)
const int maxn=1e6+10;
const int dis[4][2]={{0,1},{-1,0},{0,-1},{1,0}};
using namespace std;
using namespace __gnu_cxx;
ll gcd(ll p,ll q){return q==0?p:gcd(q,p%q);}
ll qpow(ll p,ll q){ll f=1;while(q){if(q&1)f=f*p;p=p*p;q>>=1;}return f;}
int n,m,all;
int a[maxn];
bool sushu(int p)
{
    if(p<=1)return false;
    else if(p==2)return true;
    else if(p%2==0)return false;
    for(int i=3;i<p;i+=2)if(p%i==0)return false;
    return true;
}
void dfs(int p)
{
    if(p>n)return;
    if(sushu(p))a[all++]=p;
    else return;
    dfs(p*10+1);
    dfs(p*10+3);
    dfs(p*10+7);
    dfs(p*10+9);
}
int main()
{
    int i,j,k,t;
    scanf("%d",&n);
    dfs(2);
    dfs(3);
    dfs(5);
    dfs(7);
    sort(a,a+all);
    for(i=0;i<all;i++)printf("%d ",a[i]);
    printf("\n");
    //system ("pause");
    return 0;
}

 


posted @ 2016-07-30 09:34  mxzf0213  阅读(955)  评论(0编辑  收藏  举报