Description
我们都知道素数的定义,然而最近,实验室的“强哥”居然有一道关于素数的题不会解了,为了这道题他已经3天3夜没有吃饭了。再这样下去恐怕就……
我们集训队的同学们都非常有热心,那快来帮“强哥”解决一下吧:
给定你N个数,降序输出N个数中的素数。
Input
输入有多组测试用例,对于每组测试用例:
第一行输入一个数字N(0 < N <= 250000)
第二行输入以空格隔开的N个数字Ai(0 <= Ai <= 106输入中至少有一个Ai为素数)。
Output
对于每个测试用例,降序输出N个数中的素数,每个元素后跟一个空格。
输出每组数据后换行。
Sample Input
10
1 2 3 4 5 6 7 8 9 10
2
2 2
Sample Output
7 5 3 2
2 2
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<functional>
#define max 1000010
using namespace std;
int a[max];
int prime[max];
int get_prime(){
memset(prime,1,sizeof(prime));
prime[0]=0;
prime[1]=0;
for(int i=2;i<max;i++){
if(prime[i]){
for(int j=i+i;j<max;j+=i){
prime[j]=0;
}
}
}
return 0;
}
int main(){
int n;
get_prime();
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
sort(a,a+n,greater<int>());
for(int i=0;i<n;i++){
if(prime[a[i]]){
printf("%d ",a[i]);
}
}
printf("\n");
}
return 0;
}