#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
int main()
{
int noOfTests ;
cin >> noOfTests ;
int *lower = new int [noOfTests] ;
int *upper = new int [noOfTests] ;
for (int i=0 ; i<noOfTests ; i++)
cin >> lower[i] >> upper[i] ;
if(noOfTests<=10)
for (int test = 0; test < noOfTests; test++)
{
if(upper[test]<=1000000000&&lower[test]<=1000000000)
if(upper[test]-lower[test]<=100000)
{
int sqrtupper=sqrt(upper[test]);
int *prime1 = new int[(upper[test]-lower[test])+1]; //range array
memset (prime1, 0, (upper[test]-lower[test]+1) * sizeof (int));
for(int i=0;i<upper[test]-lower[test]+1;i++)
prime1[i]=lower[test]+i;
int *prime2 = new int[sqrtupper]; //prime array
memset (prime2, 0, sqrtupper * sizeof (int));
prime2[0] = 1;
for (int i = 1; i<sqrtupper; i++)
{
if(prime2[i]) // skip if non-prime
continue;
int base = i + 1; // actual number is flag+1
for (int j = base * 2 - 1; j<sqrtupper; j += base)
{
prime2[j] = 1;
}
}
int nondivisible;
for(int i=0;i<upper[test]-lower[test]+1;i++)
{
if(prime1[i]==1)
continue;
if(prime1[i]==2||prime1[i]==3)
{
cout<<prime1[i]<<endl;
continue;
}
nondivisible=1;
for(int j=1;j<sqrtupper;j++)
{
if(prime2[j]==0)
{
if(prime1[i]%(j+1)==0)
{
nondivisible=0;
break;
}
}
}
if(nondivisible==1)
cout<<prime1[i]<<endl;
}
cout<<endl;
}
}
}
It is displaying the primes properly! I don't see what's wrong. Try compiling and running it, please.