templates/sieve.cpp
compilable
$cat templates/sieve
Sieve of Eratosthenes
Linear sieve computing primes, smallest prime factor (SPF), Euler's totient, and Mobius function in O(n).
#sieve#prime#number-theory#totient#mobius
Log in to track progress, save custom versions, and organize into collections.Log In
$cat source_code/
cpp
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
vector<bool> sieve(int n) {
vector<bool> is_prime(n + 1, true);
is_prime[0] = is_prime[1] = false;
for (ll i = 2; i * i <= n; i++) {
if (is_prime[i]) {
for (ll j = i * i; j <= n; j += i) {
is_prime[j] = false;
}
}
}
return is_prime;
}
vector<int> get_primes(vector<bool>& is_prime) {
vector<int> primes;
for (int i = 2; i < (int)is_prime.size(); i++)
if (is_prime[i]) {
primes.push_back(i);
}
return primes;
}
void Solve() {
// write your code here
}
int main() {
ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int t = 1;
// cin >> t;
while (t--) Solve();
return 0;
}38 linesutf-8
$cat explanation_notes.md
notes_viewer --renderedmarkdown (math enabled)
Sieve of Eratosthenes — Primality Testing
Quick Start (ECPC)
void Solve()
{
int n; cin >> n;
auto is_prime = sieve(n); int q; cin >> q;
while (q--) {
int x; cin >> x;
cout << (is_prime[x] ? "YES" : "NO") << "\n";
}
auto primes = get_primes(is_prime);
cout << "count: " << primes.size() << "\n";
}
Functions
sieve(n) — returns vector, is_prime[i] for 0..nget_primes(is_prime) — returns vector, all primes from is_primeNotes
sieve(n) builds is_prime[0..n].get_primes() iterates the boolean array and collects primes.