标签:
题目1163:素数
时间限制:1 秒
内存限制:32 兆
特殊判题:否
输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。
输入有多组数据。
每组一行,输入n。
输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。
100
11 31 41 61 71
解题思路:首先找到所在范围的所有素数,存起来,然后找满足条件的并输出。
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> #include<stack> #include<math.h> using namespace std; int prime[10000];//保存筛选的素数 int primesize;//保存素数的个数 bool mark[10001];//若 mark[x]为true,表示其已被标为非素数 void init() { for(int i=0; i<10001; i++) { mark[i]=false; } primesize=0; for(int i=2; i<10001; i++) { if(mark[i]==true)//素数已被标记过,跳过 continue; else { prime[primesize++]=i;//否则,又得到一个新素数 for(int j=i*i; j<10001; j+=i)//从i的平方开始标记 { mark[j]=true; } } } } int main() { init();//在程序开始的时候,得到2-10000中所有素数 int n; while(scanf("%d",&n)!=EOF) { bool isoutput=false;//第一个数输出前不要空格,同时判断有没有符合的数出现 for(int i=0; i<primesize; i++) { if(prime[i]<n&&prime[i]%10==1) { if(isoutput==false) { isoutput=true; printf("%d",prime[i]); } else printf(" %d",prime[i]); } } if(isoutput==false)//没有一个输出,说明不存在,输出-1; { printf("-1\n"); } else printf("\n"); } return 0; } /************************************************************** Problem: 1163 User: zhuoyuezai Language: C++ Result: Accepted Time:10 ms Memory:1568 kb ****************************************************************/
标签:
原文地址:http://www.cnblogs.com/zhuoyuezai/p/5741264.html