1 / 2
May 2023
import java.util.*;
import java.lang.*;
 
class Main
{
	public static void main (String[] args) throws java.lang.Exception{
 
    Scanner scanner = new Scanner(System.in);
    int cases = scanner.nextInt();
    for (int i = 0; i < cases; i++){
        int r1 = scanner.nextInt();
        int r2 = scanner.nextInt();
        check_primes_sieve(r1, r2);
	}
	 scanner.close();
}
    public static void check_primes_sieve(int r1, int r2) {
        StringBuilder sb = new StringBuilder();
        boolean[] numbers = new boolean[r2];
        for (int i = 0; i < numbers.length; i++) {
            if (i <= 1)
                numbers[i] = true;
            else {
                if (!numbers[i]) {
                    if (i >= r1)
                            sb.append(i).append("\n");
                    for (int j = i * i; j < numbers.length; j += i)
                        numbers[j] = true;
                }
            }
        }
        System.out.print(sb.toString());
    }
}

I can’t tell what is the problem, it seems to print well but I got runtime error (NZEC), I could use some more details

  • created

    May '23
  • last reply

    May '23
  • 1

    reply

  • 443

    views

  • 2

    users

  • 1

    like

  • 1

    link

On IDEONE, try it with range 2147483000 2147483647, and you’ll get:

Exception in thread “main” java.lang.OutOfMemoryError: Requested array size exceeds VM limit
at Main.check_primes_sieve(Main.java:19)
at Main.main(Main.java:13)

Pretty sure this line in check_primes_sieve is the problem:

boolean[] numbers = new boolean[r2];