Submission #1207091
Failing 2 test cases why
#include <bits/stdc++.h>
#define MAX_SIZE 1000005
using namespace std;
void SieveOfEratosthenes(vector& primes)
{
// Create a boolean array “IsPrime[0…MAX_SIZE]” and
// initialize all entries it as true. A value in
// IsPrime[i] will finally be false if i is
// Not a IsPrime, else true.
bool IsPrime[MAX_SIZE];
memset(IsPrime, true, sizeof(IsPrime));
for (int p = 2; p * p < MAX_SIZE; p++) {
    // If IsPrime[p] is not changed, then it is a prime
    if (IsPrime[p] == true) {
        // Update all multiples of p greater than or
        // equal to the square of it
        // numbers which are multiple of p and are
        // less than p^2 are already been marked.
        for (int i = p * p; i < MAX_SIZE; i += p)
            IsPrime[i] = false;
    }
}
// Store all prime numbers
for (int p = 2; p < MAX_SIZE; p++)
    if (IsPrime[p])
        primes.push_back(p);
}
// bool find(int x){
// 	if(x==1){
// 		return false;
// 	}
//     for(int i=1;i<x;i++){
// 		if(x%i==0){
// 			return -1;
// 		}
// 	}
// 	ret
// }
int main() {
int n,q;
cin>>n>>q;
int arr[n];
vector primes;
// Function call
SieveOfEratosthenes(primes);
stack<int>a;
stack<int>b;
for(int i=0;i<n;i++){
	cin>>arr[i];
}
for(int i=0;i<q;i++){
	int p=primes[i];
	
		for(int j=n-1;j>=0;j--){
		 if(arr[j]%p==0){
           a.push(arr[j]);
		 }
		 else{
			 b.push(arr[j]);
		 }
	 }
	
	
     
}
//cout<<endl;
while(!a.empty()){
	cout<<a.top()<<endl;
	a.pop();
}
while(!b.empty()){
	cout<<b.top()<<endl;
	b.pop();
}
return 0;
}
