import java.util.ArrayList;
import java.util.List;
public class Main {
// Function to find all prime numbers up to n using Sieve of Eratosthenes
public static List<Integer> sieve(int n) {
// Create a boolean array prime[0..n] and initialize all entries as true
boolean[] prime = new boolean[n + 1];
for (int i = 0; i <= n; i++) {
prime[i] = true; // taken every elemnet ass prime
}
prime[0] = false; // 0 and 1 are not prime numbers
prime[1] = false;
// Only need to check numbers up to sqrt(n)
// int limit = (int) Math.sqrt(n);
// Mark multiples of each prime as not prime
for (int p
= 2; p
<= (int) Math.
sqrt(n
); p
++) { if (prime[p]) { // If p is prime
for (int i = p * p; i <= n; i += p) { // Mark multiples
prime[i] = false;
}
}
}
// Collect all prime numbers into a list
List<Integer> primes = new ArrayList<>();
for (int i = 0; i <= n; i++) {
if (prime[i]) {
primes.add(i);
}
}
return primes; // Return all primes up to n
}
// Function to find prime numbers in a specific range [start, end]
public static List<Integer> sieveRange(int start, int end) {
// Step 1: Find all primes up to 'end'
List<Integer> primes = sieve(end);
// Step 2: Create a list to store primes in the range [start, end]
List<Integer> rangePrimes = new ArrayList<>();
// Step 3: Filter primes that are >= start
for (int prime : primes) {
if (prime >= start) {
rangePrimes.add(prime);
}
}
return rangePrimes; // Return primes in the desired range
}
public static void main
(String[] args
) { int l = 20; // Start of the range
int r = 200; // End of the range
// Get all prime numbers in the range [l, r]
List<Integer> primesInRange = sieveRange(l, r);
// Print all prime numbers in the range
System.
out.
println("Prime numbers between " + l
+ " and " + r
+ " are:"); for (int prime : primesInRange) {
}
}
}