-
题目描述:
-
输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。
-
输入:
-
输入有多组数据。
每组一行,输入n。
-
输出:
-
输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。
-
样例输入:
-
100
-
样例输出:
-
11 31 41 61 71
-
解题思路:素数筛选法
-
#include<stdio.h> #define MAX 10001 int mark[MAX];//标记的数组 int PrimeSize;//统计素数的个数 int prime[MAX];//保存素数的数组 void select(){//素数筛选 PrimeSize=0;//对统计素数的个数进行初始化 for(int i=0;i<MAX;i++) mark[i] =0;//对标记数组进行初始化为0 for(int i=2;i<MAX;i++){ if(mark[i]) continue;//如果标记为1,则为非素数,继续进行筛选 prime[PrimeSize++]=i;//否则为素数,将该数存入到数组里面 for(int j=i*i;j<MAX;j+=i)//该素数的倍数都标记为非素数 mark[j]=1; } } int main(){ select(); int n; bool output; while(~scanf("%d",&n)){// output=false;//对判断第一个素数的标记变量进行初始化为假 for(int i=0;i<PrimeSize;i++){ if(prime[i]< n&&prime[i]%10==1){ if(output==false){ output=true; printf("%d",prime[i]);//输出第一个符合条件个位数为1的素数 } else printf(" %d",prime[i]);//输出非第一个个位数为1的范围内的素数 } } if(output==false){ printf("-1\n"); break; } printf("\n"); } return 0; }