#include <iostream>
#include <math.h>
#include <algorithm>
using namespace std;
bool Isprimer(int n)
{
int flag=1;
if (n<2)
return false;
if (n==2)
return true;
for (int i=2;i<=sqrt(double(n));i++)
if (n%i==0)
{
flag=0;
break;
}
if(flag)
return true;
else
return false;
}
bool Primer_patener(int x,int y)
{
if(Isprimer(x+y))
return true;
else
return false;
}
int main()
{
int N,a[100];
int max=0;
cin>>N;
if (N%2!=0 || N>100)
return -1;
for (int i=0;i<N;i++)
cin>>a[i];
sort(a,a+N);
while (next_permutation(a,a+N)) //穷举每一种组合
{
int k=0;
for(int j=0;j<N;j+=2)
if (Primer_patener(a[j],a[j+1]))
k++;
if (max<k)
max=k;
}
cout<<max<<endl;
}
My version
#include<iostream>
#include<algorithm>
using namespace std;
int isSushu(int a);
int n, in[100], num = 0, flag[100] = {0};
int main(){
cin>>n;
for(int i = 0; i < n; i++)
cin>>in[i];
sort(in, in+n);
for(int i = 0; i < n-1; i++){
if(flag[i]) continue;
for(int j = 1; j < n; j++){
if(flag[j]) continue;
int sum = in[i] + in[j];
if(isSushu(sum)){
num++;
flag[i]= flag[j] = 1;
}
}
}
cout<<num<<endl;
return 0;
}
int isSushu(int a){
for(int i = 2; i < a; i++){
if(a%i == 0)
return 0;
}
return 1;
}