It is showing wrong answer. Can anyone tell me where I am going wrong?
#include <bits/stdc++.h>
using namespace std;
vector* sieve()
{
int i,j;
vector* primes=new vector();
bool mark[100001];
memset(mark,true,sizeof(mark));
for(i=2;ii<100001;i++)
{
if(mark[i])
{
for(j=ii;j<100001;j+=i)
{
mark[j]=false;
}
}
}
primes->push_back(2);
for(i=3;i<100001;i+=2)
{
if(mark[i]==true)
primes->push_back(i);
}
return primes;
}
void segmented_sieve(long long l, long long r, vector* & primes)
{
int i,curr_prime;
long long j;
long long base;
bool mark[r-l+1];
memset(mark,true,sizeof(mark));
for(i=0;primes->at(i)*(long)(long)primes->at(i)<=r;i++)
{
curr_prime=primes->at(i);
base=(l/curr_prime)*curr_prime;
if(base<l)
base=base+curr_prime;
for(j=base;j<=r;j+=curr_prime)
{
mark[j-l]=false;
}
if(base==curr_prime)
mark[base-l]=true;
}
for(i=0;i<=r-l;i++)
{
if(mark[i]==true)
cout<<i+l<<endl;
}
}
int main() {
int i,num;
long long m,n;
vector* primes=sieve();
cin>>num;
for(i=1;i<=num;i++)
{
cin>>m>>n;
segmented_sieve(m,n,primes);
cout<<endl;
}
return 0;
}