#define maxn 405000
int prime[maxn]; //保存素数的数组
bool flag[maxn]; //记录是否为素数 ,素数标记为false,非素数标记为true
int cnt;
void getPrime(int n) {
memset(flag, 0, sizeof(bool)*maxn);
cnt = 0;
for (int num = 2; num <= n; num++){
if (flag[num] == false) { //如果num是素数
prime[++cnt] = num;//把num加入prime素数
for (int j = 2 * num; j < n; j += num) { //理论:素数的倍数一定不是素数
flag[j] = true; //把素数的倍数标记为非素数
}//end for
}//end if
}//end for
}
时间复杂度 O(nloglogn),空间复杂度O(n)