素数

来源:互联网 发布:成都java培训费用多少 编辑:程序博客网 时间:2024/06/05 22:33

题目描述

输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。

输入

输入有多组数据。
每组一行,输入n。

输出

输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。

样例输入

70

样例输出

11 31 41 61

提示


//改进后的埃氏筛法#include <cstdio>#include <cmath>const int maxn=10001;int prime[maxn],num=0;int vis[maxn]={0};void find_prime(){    int m=round(sqrt(maxn-1));    for(int i=2;i<=m;i++) if(!vis[i])        for(int j=i*i;j<maxn;j+=i) vis[j]=1;}int main(){    int n;    find_prime();    for(int i=2;i<maxn;i++) if(!vis[i]) prime[num++]=i;    while(scanf("%d",&n)==1){        int first=1,ok=0;        for(int i=0;i<num;i++){            if(prime[i]<n&&prime[i]%10==1){                ok=1;                if(first) first=0;else printf(" ");                printf("%d",prime[i]);            }        }        if(ok) printf("\n");else printf("-1\n");    }    return 0;}


//普通方法#include <cstdio>#include <cmath>const int maxn=10001;int prime[maxn],num=0;int is_prime(int n){    if(n<=1) return 0;    int m=round(sqrt(n));    for(int i=2;i<=m;i++)        if(n%i==0) return 0;    return 1;}void find_prime(){    for(int i=2;i<maxn;i++)        if(is_prime(i)) prime[num++]=i;}int main(){    find_prime();    int n;    while(scanf("%d",&n)==1){        int first=1,ok=0;        for(int i=0;i<num;i++){            if(prime[i]<n&&prime[i]%10==1){                ok=1;                if(first) first=0;else printf(" ");                printf("%d",prime[i]);            }        }        if(ok) printf("\n");else printf("-1\n");    }    return 0;}