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; // Assume all numbers are prime initially
}
// 0 and 1 are not prime numbers
prime[0] = false;
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 <= limit; 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 = 1; // Start of the range
int r = 100; // 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) {
}
}
}