素数筛法: 对于到sqrt(max)为止的所有数:如果是质数,则把它的所有倍数都标记为合数;如果是合数,则直接遍历下一个数。
#include <iostream>
#include <string>
using namespace std;
//例题6.8 素数
int main(){
int nums[10000];//0-9999
for(int i=2;i<10000;i++){
nums[i]=0;//默认:0-质数
}
for(int i=2;i<=100;i++){
if(nums[i]==0)//如果是质数
for(int j=2;i*j<10000;j++)
nums[i*j]=1;
}
int x;
while(scanf("%d",&x)!=EOF){
int flag=0;
for(int i=2;i<x;i++)
if ((i%10==1)&&(nums[i]==0)){
flag=1;
printf("%d ",i);
}
if(flag==0)printf("-1");
printf("\n");
}
return 0;
}