- 题目描述:
-
输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。
- 输入:
-
输入有多组数据。
每组一行,输入n。
- 输出:
-
输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。
- 样例输入:
-
100
- 样例输出:
-
11 31 41 61 71
-
代码如下:
-
这个题的思路是,先利用一个数组将所有的素数保存起来,需要的时候再进行调用。以及注意输出的格式问题。#include<stdio.h> #include<math.h> int prime[10000]; //保存筛得的素数 int primeSize; //保存素数的个数 bool mark[10001]; //若mark[x]为true, 则表示该数x已经被标记为非素数 void init() { for(int i=1; i<10000; i++) { mark[i] = false; } primeSize = 0; for(int i=2; i<10000; i++) { if(mark[i] == true) continue; prime[primeSize ++] = i; //否则,又得到一个新素数 for(int j=i*i; j<=10000; j+=i) { mark[j] = true; } } } int main() { init(); int n; while(scanf_s("%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) { printf("-1\n"); } else printf("\n"); } return 0; }