九度OJ-1163

来源:互联网 发布:神舟游戏本 知乎 编辑:程序博客网 时间:2024/05/18 02:46
题目1163:素数

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:12408

解决:4339

题目描述:

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

输入:

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

输出:

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

样例输入:
100
样例输出:
11 31 41 61 71
来源:

2008年北京航空航天大学计算机研究生机试真题


#include<iostream>#include<stdio.h>#include<math.h>#include<algorithm>#define Max 10002using namespace std;bool num[Max];int prime[Max];int primesize;void Issu(){     //此处不用intx因为这个是相当于对数据进行预处理,所以不用intx引入变量 for(int i=1;i<=10000;i++){num[i]=false;}primesize=0;for(int i=2;i<=10000;i++){if(num[i]==true)  //为1说明该数据被标记过了,不用再进行处理了 continue;prime[primesize++]=i;   //如果该数没有被处理过,则先当他是素数,这样将他的所有倍数都设置为非素数 for(int j=i*i;j<=10000;j+=i){num[j]=true;   //将素数的倍数设置为非素数,注意for循环是从i*i开始的这样不是2*i开始的减少了循环的趟数     !!!!num[j]=true; }}}int main(){Issu(); //对10000之间的数进行预处理 int n;while(scanf("%d",&n)!=EOF){bool Outsign=false;//作为标记表示是否为第一个数输出 for(int i=0;i<primesize;i++){if(prime[i]<n&&prime[i]%10==1){  //注意不要忘了题目给出的是个位为1的素数 if(Outsign==false){Outsign=true; printf("%d",prime[i]);}else{printf(" %d",prime[i]);}}}if(Outsign==false){printf("%d\n",-1);}else printf("\n");}return 0;}

 

0 0
原创粉丝点击