Discover how a simple marking trick can find all primes faster than checking each number one by one!
Why Sieve of Eratosthenes Find All Primes in DSA C++?
Imagine you want to find all prime numbers up to 100 by checking each number one by one, dividing it by all smaller numbers to see if it has any divisors.
This manual method is very slow and tiring because you have to do many repeated checks. It's easy to make mistakes and miss some primes or waste time checking numbers unnecessarily.
The Sieve of Eratosthenes quickly marks off multiples of each prime starting from 2, so you only check each number once. This way, you find all primes efficiently without repeated work.
for (int num = 2; num <= 100; num++) { bool isPrime = true; for (int div = 2; div < num; div++) { if (num % div == 0) { isPrime = false; break; } } if (isPrime) cout << num << " "; }
vector<bool> sieve(101, true); sieve[0] = sieve[1] = false; for (int i = 2; i * i <= 100; i++) { if (sieve[i]) { for (int j = i * i; j <= 100; j += i) { sieve[j] = false; } } } for (int i = 2; i <= 100; i++) { if (sieve[i]) cout << i << " "; }
This method lets you find all prime numbers up to a large limit quickly and easily, saving time and avoiding errors.
When encrypting messages securely, computers need to find large prime numbers fast. The sieve helps generate these primes efficiently.
Manual prime checking is slow and repetitive.
Sieve of Eratosthenes marks multiples to find primes efficiently.
It enables fast prime generation for many applications.
Practice
Sieve of Eratosthenes algorithm?Solution
Step 1: Understand the algorithm's goal
The Sieve of Eratosthenes is designed to identify prime numbers efficiently.Step 2: Recognize the output
It marks multiples of primes as non-prime, leaving primes unmarked up to the limit.Final Answer:
To find all prime numbers up to a given limit -> Option DQuick Check:
Sieve finds primes = D [OK]
- Confusing sieve with sorting algorithms
- Thinking it calculates factorial or gcd
- Assuming it finds primes beyond the limit
n?Solution
Step 1: Check initialization for prime marking
The sieve should start with all true except 0 and 1, which are not prime.Step 2: Validate code correctness
std::vector<bool> sieve(n+1, true); sieve[0] = sieve[1] = false; uses a vector<bool> with size n+1, sets all true, then marks 0 and 1 false correctly.Final Answer:
std::vector<bool> sieve(n+1, true); sieve[0] = sieve[1] = false; -> Option AQuick Check:
Initialize sieve true except 0,1 false = A [OK]
- Using wrong data type for sieve array
- Not marking 0 and 1 as non-prime
- Initializing all false instead of true
n = 10?
int n = 10;
std::vector<bool> sieve(n+1, true);
sieve[0] = sieve[1] = false;
for (int i = 2; i * i <= n; i++) {
if (sieve[i]) {
for (int j = i * i; j <= n; j += i) {
sieve[j] = false;
}
}
}
for (int i = 2; i <= n; i++) {
if (sieve[i]) std::cout << i << " ";
}Solution
Step 1: Run sieve marking multiples
Multiples of 2 (4,6,8,10) and 3 (9) are marked false.Step 2: Identify primes left true
Numbers 2, 3, 5, 7 remain true and are printed.Final Answer:
2 3 5 7 -> Option BQuick Check:
Primes up to 10 = 2 3 5 7 [OK]
- Including non-primes like 4 or 9
- Printing 1 as prime
- Not starting inner loop from i*i
int n = 20;
std::vector<bool> sieve(n+1, true);
sieve[0] = sieve[1] = false;
for (int i = 2; i <= n; i++) {
if (sieve[i]) {
for (int j = i * 2; j <= n; j += i) {
sieve[j] = false;
}
}
}Solution
Step 1: Analyze loop conditions
The outer loop runs up to n, which is inefficient and unnecessary.Step 2: Correct loop to optimize marking
Changing outer loop to run while i * i <= n avoids redundant checks and improves performance.Final Answer:
Change outer loop condition to i * i <= n -> Option CQuick Check:
Outer loop limit = i*i <= n [OK]
- Running outer loop till n wastes time
- Starting inner loop incorrectly
- Not marking 0 and 1 false
n = 50 using the Sieve of Eratosthenes. After running the sieve, how many primes will be found?Solution
Step 1: List primes up to 50
Primes are: 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47 (total 15).Step 2: Count primes correctly
Counting carefully confirms total primes up to 50 is 15.Final Answer:
15 -> Option AQuick Check:
Count primes ≤ 50 = 15 [OK]
- Counting non-primes like 1 or 9
- Including primes beyond 50
- Miscounting total primes
Ready to prove it?
Pass the test and this pattern moves unknown
