TLE (prateek loves candy)

#include
using namespace std;
typedef long long int ll;
ll p[10000005]={0};
void primesieve(){
for(ll i=3;i<=10000005;i+=2){
p[i]=1;
}
for(ll i=3;i<=10000005;i+=2){
if(p[i]==1){
for(ll j=i*i;j<=10000005;j=j+i){
p[j]=0;
}
}
}
p[2]=1;
p[0]=p[1]=0;

}

int main() {
ll t;
cin>>t;

for(ll z=0;z<t;z++){
ll n;
cin>>n;

ll count=0;

ll i=2;

primesieve();

while (count<n){
    if (p[i]==1){
        count++;
    }
    i++;
}
cout<<i-1<<endl;

}
return 0;
}

you are calling sieve function in every testcase
it is not correct
you have to build the sieve just once (outside the for loop ) and count the no of ones inside for loop every time