排序并且找出其中的素数

对N个自然数进行从大到小的排序(N可以定义任意大于1的常数),并找出其中的素数

#include <iostream>
#include <algorithm>
using namespace std;
#define N 20000
void getprime();                //预先打表
int isprime[N];                 //记录素数
int main()
{
    int n;
    cin >> n;
    int *a = new  int[n]; 
    for (int i = 0; i < n; i++) //得到n个待判断的数
        cin >> a[i];
    sort(a, a + n);
    getprime();                 //预先打表,打表后,数组isprime中素数为1,合数为0
    for (int i = 0; i < n; i++)
        if (isprime[a[i]])
            cout << a[i] << ' ';
    return 0;
}

void getprime()
{
    int j;
    memset(isprime, -1, sizeof(isprime));
    isprime[0] = isprime[1] = 0;
    for (int i= 2; i < N; i++)  //素数的倍数变为合数
   if (isprime[i])
            for(j = i * i; j < N; j += i)
                isprime[j] = 0;
}