Please do check my implementation of segmented sieve and let me know where i am wrong.
#include<bits/stdc++.h>
using namespace std;
#define MAX_LIM 100001
vector<int> primes;
void sieveOfEratosthenes(){
bool PrimeArray[MAX_LIM];
memset(PrimeArray,true,sizeof(PrimeArray));
PrimeArray[0]=false;
PrimeArray[1]=false;
for(int i=2;i*i<MAX_LIM;i++){
if(PrimeArray[i]==true){
for(int j=i*i;j<MAX_LIM;j+=i){PrimeArray[j]=false;}
}
}
for(int i=2;i<MAX_LIM;i++){
if(PrimeArray[i]){primes.push_back(i);}
}
}
void segmentedSieve(int low,int high){
int req=(high-low)+1;
bool PrimeArray2[req];
for(int i=0;i<req;i++){
PrimeArray2[i]=true;
}
for(int i=0;primes[i]*primes[i]<=high;i++)
{
int curPrime = primes[i];
int base = floor(low/curPrime)*curPrime;
if(base<low){base+=curPrime;}
for(int j= base;j<=high;j+=curPrime){
PrimeArray2[j-low]=false;
}
if(base==curPrime){PrimeArray2[base-low]=true;}
}
PrimeArray2[0]=false;
int count=0;
for(int i=0;i<req;i++){
if(PrimeArray2[i]){
count++;
cout<<i+low<<endl;
}
}
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(NULL);
int testCases;
int high1,lows;
cin>>testCases;
sieveOfEratosthenes();
while(testCases--){
cin>>lows>>high1;
segmentedSieve(lows,high1);
cout<<endl;
}
return 0;
}