题目描述
知识点
素数筛法
结果
实现
码前思考
- 传统的素数筛法只是在里面加入了一些小的要求而已。大致的模板还是一样的,就是要多写一个判断条件。。。。。。
代码实现
//这个题目分为两步
//1. 打表1~10000的所有素数且满足条件的素数
//2. 根据题意进行输出
#include "bits/stdc++.h"
using namespace std;
const int maxn = 10010;
//满足个位为1的素数
int prime[maxn],pNum;
//单纯的是否是素数,初始化的false代表是素数
bool p[maxn] = {0};
void Find_Prime(){
for(int i=2;i<maxn;i++){
if(p[i] == false){
//1.更新p[]数组
for(int j=i+i;j<maxn;j=j+i){
p[j] = true;
}
//2. 判断个位是否是1
if(i % 10 == 1){
prime[pNum++] = i;
}
}
}
}
int main(){
//首先进行打表
pNum = 0;
Find_Prime();
int n;
while(~(scanf("%d",&n))){
if(n > 11){
printf("11");
for(int i=1;i<pNum;i++){
if(prime[i] < n){
printf(" %d",prime[i]);
}
}
}else{
printf("-1");
}
printf("\n");
}
return 0;
}
码后反思
- 要时常注意这种题目每行的最后是否需要输出空格,这是需要注意的!
- 注意
bool p[]
的初始化为bool p[maxn] = {0}
; - 共享数据结构一定要记得初始化,避免交叉使用!