#includeusing namespace std; int main() { int n; cin >> n; for (int i = 2; i <= n; i++) { bool flag = true; for (int j = 2; j * j <= i; j++) { if (i % j == 0) { flag = false; break; } } if (flag) cout << i << ' '; } return 0; }
时间复杂度:O()
埃氏筛:用质数把质数的倍数筛掉#includeusing namespace std; bool prime[1000005]; int main() { int n; cin >> n; memset(prime, 1, sizeof prime); for (int i = 2; i <= n; i++) { if (prime[i]) { for (int j = 2 * i; j <= n; j += i) { prime[j] = 0; } cout << i << ' '; } } return 0; }
时间复杂度:O()
欧拉筛:每个合数只需要被其最小的质因子筛掉#includeusing namespace std; bool not_prime[1000005]; int prime[1000005], tot = 0; int main() { int n; cin >> n; for (int i = 2; i <= n; i++) { if (!not_prime[i]) prime[++tot] = i; for (int j = 1; j <= tot && i * prime[j] <= n; j++) { not_prime[i * prime[j]] = 1; if (i % prime[j] == 0) break; } } for (int i = 1; i <= tot; i++) { cout << prime[i] << ' '; } return 0; }
时间复杂度:O(n)



