Discover how a simple marking trick can find 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 every smaller number 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 unnecessary numbers.
The Sieve of Eratosthenes quickly marks off multiples of each prime number starting from 2, so you don't have to check every number individually. It efficiently finds all primes up to your limit with fewer steps.
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) printf("%d ", num); }
bool isPrime[101]; for (int i = 2; i <= 100; i++) isPrime[i] = true; for (int i = 2; i * i <= 100; i++) { if (isPrime[i]) { for (int j = i * i; j <= 100; j += i) isPrime[j] = false; } } for (int i = 2; i <= 100; i++) { if (isPrime[i]) printf("%d ", i); }
This method enables you to find all prime numbers up to any large number quickly and reliably.
Finding prime numbers fast is useful in cryptography, where secure keys depend on large prime numbers.
Manual prime checking is slow and error-prone.
Sieve of Eratosthenes marks multiples to find primes efficiently.
It helps find all primes up to a limit quickly.
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 to find all primes up to a limit.Final Answer:
To find all prime numbers up to a given limit -> Option BQuick Check:
Prime finding = B [OK]
- Confusing prime finding with sorting
- Thinking it finds divisors or reverses strings
- Assuming it works for negative numbers
n?Solution
Step 1: Understand sieve initialization
The sieve array uses 1 to mark potential primes initially.Step 2: Check array size and initialization
Array size should be n+1 to include number n, and all set to 1 (true) initially.Final Answer:
int sieve[n+1]; for(int i=0; i<=n; i++) sieve[i] = 1; -> Option AQuick Check:
Initialize all to 1 for primes [OK]
- Using size n instead of n+1
- Initializing with zeros instead of ones
- Marking 0 and 1 as prime initially
int n = 10;
int sieve[11];
for(int i=0; i<=n; i++) sieve[i] = 1;
sieve[0] = sieve[1] = 0;
for(int i=2; i*i<=n; i++) {
if(sieve[i]) {
for(int j=i*i; j<=n; j+=i) sieve[j] = 0;
}
}
for(int i=2; i<=n; i++) {
if(sieve[i]) printf("%d ", i);
}Solution
Step 1: Initialize sieve and mark 0,1 as non-prime
Array sieve marks 0 and 1 as 0 (not prime), others as 1 (prime candidate).Step 2: Mark multiples of primes as non-prime
For i=2, mark 4,6,8,10 as 0; for i=3, mark 9 as 0.Step 3: Print all indices with sieve[i] = 1
Primes are 2, 3, 5, 7 only.Final Answer:
2 3 5 7 -> Option DQuick Check:
Primes up to 10 = 2 3 5 7 [OK]
- Printing 1 as prime
- Including non-primes like 4 or 9
- Starting marking multiples from i instead of i*i
int n = 20;
int sieve[21];
for(int i=0; i<=n; i++) sieve[i] = 1;
sieve[0] = sieve[1] = 0;
for(int i=2; i<=n; i++) {
if(sieve[i]) {
for(int j=2*i; j<=n; j+=i) sieve[j] = 0;
}
}Solution
Step 1: Analyze outer loop condition
Outer loop runs from 2 to n, but it should run only up to sqrt(n) for efficiency.Step 2: Understand inner loop start
Inner loop correctly starts from 2*i, but starting from i*i is more optimal.Step 3: Correct the outer loop condition
Change outer loop to for(i=2; i*i<=n; i++) to avoid unnecessary iterations.Final Answer:
Change outer loop condition to i*i <= n -> Option CQuick Check:
Outer loop till sqrt(n) improves sieve [OK]
- Running outer loop till n wastes time
- Starting inner loop from 2*i instead of i*i (less efficient)
- Not marking 0 and 1 as non-prime
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 carefully
Counting again: 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47 = 15 primes.Step 3: Check if 1 is counted
1 is not prime, so total primes = 15.Final Answer:
15 -> Option AQuick Check:
Count primes up to 50 = 15 [OK]
- Including 1 as prime
- Miscounting primes between 40 and 50
- Forgetting to exclude non-primes
Ready to prove it?
Pass the test and this pattern moves unknown
