欧拉筛法
1 vector<int> Prime(int n){ // 求解n以内(含n)的素数 2 bool flag[n + 1]; // 标记数组,flag[i]==0表示i为素数,flag[i]==1表示i为合数 3 memset(flag, 0, sizeof(flag)); 4 vector<int> prime; 5 int cnt = 0; // 素数个数 6 for (int i = 2; i <= n; ++i) { 7 if (!flag[i]) { 8 prime.push_back(i); // 将i加入素数表 9 cnt++; 10 } 11 for (int j = 0; j < cnt; ++j) 12 { // 保证每个合数只会被它的最小质因数筛去 13 if (i * prime[j] > n) break; 14 flag[i * prime[j]] = 1; 15 if (i % prime[j] == 0) break; 16 } 17 } 18 return prime; 19 }