vector<int> sieve(int n){
int size = sqrt(n);
bool primes[size+1];
memset(primes,true,size+1);
primes[0] = primes[1] = false;
for(int i = 2; i <= size; i++){
if(primes[i]){
int k = 2;
while(i*k <= size){
primes[i*k] = false;
k++;
}
}
}
vector<int> ans;
for(int i = 0 ; i<= size; i++)
if(primes[i])
ans.push_back(i);
return ans;
}