法一:朴素筛法

#include <bits/stdc++.h>

const int N = 10010;
int primes[N], cnt;     // primes[]存储所有素数
bool st[N];         // st[x]存储x是否被筛掉

// 朴素筛法 
void get_primes(int n){
	for (int i=2; i<=n; i++){
		if (!st[i]){
			primes[cnt] = i;
			cnt ++; 	
		}
		for (int j=i+i; j<=n; j+=i){
			st[j] = true;
		}
	}
}

int main(){
	int n;	
	while (scanf("%d", &n) != EOF){
		if (n <= 11){
			printf("-1\n");
			continue;
		}
		get_primes(n);
		for (int i=0; i<=cnt; i++){
			if (primes[i] % 10 == 1 && primes[i] != n){
				printf("%d ", primes[i]);
			}
		}
		printf("\n");
	}
	return 0;
}

法二:埃式筛法

#include <bits/stdc++.h>

const int N = 10010;
int primes[N], cnt;     // primes[]存储所有素数
bool st[N];         // st[x]存储x是否被筛掉

// 埃式筛法
void get_primes(int n) {
    for (int i = 2; i <= n; i++) {
        if (!st[i]) {
            primes[cnt] = i;
            cnt ++;
            for (int j = i + i; j <= n; j += i) {
                st[j] = true;
            }
        }
    }
}

int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        if (n <= 11) {
            printf("-1\n");
            continue;
        }
        get_primes(n);
        for (int i = 0; i <= cnt; i++) {
            if (primes[i] % 10 == 1 && primes[i] != n) {
                printf("%d ", primes[i]);
            }
        }
        printf("\n");
    }
    return 0;
}

法三:线性筛法

#include <bits/stdc++.h>

const int N = 10010;
int primes[N], cnt;     // primes[]存储所有素数
bool st[N];         // st[x]存储x是否被筛掉

// 线性筛法
void get_primes(int n) {
    for (int i = 2; i <= n; i++) {
        if (!st[i]) {
            primes[cnt] = i;
            cnt ++;
        }
        for (int j=0; primes[j]<=n/i; j++){
            st[primes[j] * i] = true;
            if(i % primes[j] == 0) break; 
        }
    }
}

int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        if (n <= 11) {
            printf("-1\n");
            continue;
        }
        get_primes(n);
        for (int i = 0; i <= cnt; i++) {
            if (primes[i] % 10 == 1 && primes[i] != n) {
                printf("%d ", primes[i]);
            }
        }
        printf("\n");
    }
    return 0;
}