#埃氏筛#
#include <bits/stdc++.h>
using namespace std;
//存储所有质数
int ans[1000];
int isPrime[2000];
int main() {
int n;
cin >> n;
int num = 1;
for(int i=1; i<=n; i++) {
isPrime[i] = 1;
}
for(int i=2; i<=n; i++){
//如果是合数,那么continue
if(!isPrime[i]) {
continue;
}
//如果是质数,那么存数组
ans[num++] = i;
for(int j=i*2; j<=n; j+=i){
//标志为合数 ,缺点 重复标记
isPrime[j] = 0;
}
}
for(int i=1; i<num; i++) {
cout << ans[i] << " ";
}
return 0;
}
#欧拉筛#
#include <iostream>
#include <cstring>
using namespace std;
//存放所有的数字
int allNum[2000];
//存放质数
int prime[1000];
int primeNum = 1;
int main() {
int n;
cin >> n;
//先定义所有的数均为质数
memset(allNum, 1, sizeof(allNum));
//0 和 1 不是质数
allNum[0] = allNum[1] = 0;
//剔除合数(合数设置为0)
for(int i=2; i<=n; i++) {
//如果是质数,那么加入到质数表中,并剔除对应的合数
if(allNum[i]) {
prime[primeNum++] = i;
}
//遍历质数列表,剔除对应的合数
for(int j=1; j<primeNum && prime[j]*i<n; j++) {
allNum[prime[j] * i] = 0;
//如果遇到能被i整除的,那么直接break
if(i%prime[j] == 0 && i!=j) {
break;
}
}
}
return 0;
}