As per your suggestion, I tried as below instead of maintaining the boolean array of q size, but instead of only (p-q) size.
Still it gives NZEC error.
using System;
public class PRIME1
{
static void Main(string[] args)
{
int x = int.Parse(Console.ReadLine());
int count = x;
string input;
int val1;
int val2;
int index;
char[] inputChar;
while (count > 0)
{
input = Console.ReadLine();
inputChar = input.ToCharArray();
index = input.IndexOf(' ');
val1 = int.Parse(new String(inputChar, 0, index));
val2 = int.Parse(new String(inputChar, index + 1, input.Length-index-1));
PrintPrimes(val1, val2);
Console.WriteLine();
count--;
}
}
static void PrintPrimes(int p, int q)
{
int half = (int)Math.Sqrt(q);
int num = (q - p + 1);
bool[] arr = new bool[num];
for (int i = 0; i < num; i++)
{
arr[i] = true;
}
for (int i = 1; i <= half; i++)
{
int count = 2;
for (int j = count * (i + 1); j <= q; j = count * (i + 1))
{
if (j > p)
{
arr[j - 1] = false;
}
count++;
}
}
for (int i = 0; i < num; i++)
{
if (arr[i])
Console.WriteLine(i+1);
}
}
}