用埃氏筛选将10000内的尾数为1的素数保存在数组中,按要求输出。
#include <cstdio>
#include <vector>
#include <algorithm>
#include <math.h>
using namespace std;
int hashtable[10001]={1};
int main(){
int a, n, mark=0;
vector<int> primes;
fill(hashtable,hashtable+10001,1);
hashtable[1]=false;
for(int i = 2; i <= 10000; i++){
if(hashtable[i]==true){
for(int j=i+i; j<= 10000; j+=i){
hashtable[j] = false;
}
if(i%10==1) primes.push_back(i);
}
}
while(scanf("%d" ,&n)!=EOF){
mark=0;
vector<int>::iterator it = primes.begin();
for(int i=0; i<primes.size() && *(it+i)<n; i++){
printf("%d",*(it+i));
mark=1;
if(mark && i<primes.size()-1 && *(it+i+1)<n ) printf(" ");
}
if(mark!=1) printf("-1");
printf("\n");
}
return 0;
}
还请大家多多指出代码冗余之处以及题目的新思路。
转载请注明出处。