素数
来源:互联网 发布:成都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;}
阅读全文
0 0