一开始isprime[]初始化为0。从2开始,2是素数,存进prime[],然后2的倍数都标记为1(即不是素数),以此类推,3是素数,进行相同操作,4不是……。
1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 #include<cstring> 5 #include<algorithm> 6 #include<cmath> 7 #define IO ios::sync_with_stdio(false);cin.tie(0); 8 #define INF 1e18 9 typedef long long ll; 10 using namespace std; 11 int n, cnt = 0, isprime[100010], prime[100010]; 12 int main() 13 { 14 cin >> n; 15 for(int i = 2; i <= n; i++){ 16 if(!isprime[i]){ 17 prime[cnt++] = i; 18 for(int j = 2*i; j <= n; j += i){ 19 isprime[j] = 1; 20 } 21 } 22 } 23 for(int i = 0; i < cnt; i++){ 24 cout << prime[i] << " "; 25 } 26 return 0; 27 }