对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;
}