Prime visit problem

#include
using namespace std;
void prime (int p)
{
int n =100000;
//mark all odd no. as 1
for(int i =3;i<n;i+=2)
{
p[i]=1;
}
//now check only odd no.
for(int i=3;i<n;i+=2)
{
if(p[i]==1)
{
for(int j=i
i;j<n;j=j+i)
{
p[j]=0;
}
}
}
p[0]=p[1]=0;
p[2]=1;
}
int main() {
int n;
cin>>n;

int p[1000005]={0};
prime(p);
int q[1000005]={0};
for(int i=1;i<=1000000;i++)
{
	q[i]=q[i-1]+p[i];
}
for(int i=0;i<n;i++)
{
	int a,b;
	cin>>a>>b;
	cout<<q[b]-q[a]<<endl;
}


return 0;

}

it shows segmenttion error can anyone help me

#include

using namespace std;

void prime (int *p)

{

long int n =1000000;

//mark all odd no. as 1

for(long int i=3;i<n;i+=2)

{

p[i]=1;

}

//now check only odd no.

for(long int i=3;i<n;i+=2)

{

if(p[i]==1)

{

for(long int j=i*i;j<n;j=j+i)

{

p[j]=0;

}

}

}

p[0]=p[1]=0;

p[2]=1;

}

int main()

{

int n;

cin>>n;

int p[1000005]={0};

primeĀ§;

int q[1000005]={0};

for(int i=1;i<1000005;i++)

{

q[i]=q[i-1]+p[i];

}

for(int i=0;i<n;i++)

{

long long int a,b;

cin>>a>>b;

cout<<q[b]-q[a]<<endl;

}
return 0;
}

you were doing 2 errors first is not passing by reference and second is not taking long int data type at required positions