// 素数筛选法。。。
#include<stdio.h>
int prime[10000]; // 保存筛得的素数int primesize; // 保存素数的个数
bool mark[10001]; // 为true时,表示是非素数
void init(){
for(int i=1;i<=10000;i++){
mark[i]=false;
} // 初始化所有数字均没被标记
primesize=0;
for(int i=2;i<=10000;i++){ // 依次遍历2到10000所有数字
if(mark[i]==true) continue; // 若该数字已经被标记,则跳过
prime[primesize++]=i; // 否则,有新得到一个素数
for(int j=i*i;j<=10000;j+=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) printf("-1\n");
else printf("\n");
}
return 0;
}
631

被折叠的 条评论
为什么被折叠?



