题解 | #素数伴侣#
素数伴侣
http://www.nowcoder.com/practice/b9eae162e02f4f928eac37d7699b352e
#include<iostream>
#include<vector>
#include<cmath>
#include<map>
using namespace std;
int main()
{
int a;
while(cin>>a)
{
vector<int>c;
for(int i=0;i<a;i++)
{
int b;
cin>>b;
c.push_back(b);
}
vector<vector<int>>d(a);
for(int i=0;i<a;i++)
{
for(int j=0;j<a;j++)
{
if(i!=j)
{
int e=c[i]+c[j];
for(int m=2;m<sqrt(e)+1;m++)
{
int n=sqrt(e);
if(e%m==0)
{
break;
}
else if(m==n)
{
d[i].push_back(c[j]);
}
}
}
}
}
for(int i=0;i<d.size();i++)
{
if(d[i].empty())
{
d.erase(d.begin()+i);
c.erase(c.begin()+i);
i=-1;
}
}
if(d.empty())
{
cout<<0;
break;
}
int w=0;
while(d.size())
{
int f=10000,g;
for(int i=0;i<d.size();i++)
{
if(d[i].size()<f)
{
f=d[i].size();
g=i;
}
}
int h=0;
for(int i=0;i<d.size();i++)
{
int u=0;
if(i!=g)
{
for(int j=0;j<d[i].size();j++)
{
if(d[i][j]==d[g][0])
{
d[i].erase(d[i].begin()+j);
u++;
}
else if(d[i][j]==c[g])
{
d[i].erase(d[i].begin()+j);
u++;
}
if(u==2)
{
break;
}
}
}
}
int x=-1;
for(int i=0;i<c.size();i++)
{
if(d[g][0]==c[i])
{
d.erase(d.begin()+i);
c.erase(c.begin()+i);
x=i;
break;
}
}
if(x>=0&&x<g)
{
c.erase(c.begin()+g-1);
d.erase(d.begin()+g-1);
w++;
}
else
{
c.erase(c.begin()+g);
d.erase(d.begin()+g);
w++;
}
for(int i=0;i<d.size();i++)
{
if(d[i].empty())
{
c.erase(c.begin()+i);
d.erase(d.begin()+i);
i=-1;
}
}
}
cout<<w;
}
}
#include<vector>
#include<cmath>
#include<map>
using namespace std;
int main()
{
int a;
while(cin>>a)
{
vector<int>c;
for(int i=0;i<a;i++)
{
int b;
cin>>b;
c.push_back(b);
}
vector<vector<int>>d(a);
for(int i=0;i<a;i++)
{
for(int j=0;j<a;j++)
{
if(i!=j)
{
int e=c[i]+c[j];
for(int m=2;m<sqrt(e)+1;m++)
{
int n=sqrt(e);
if(e%m==0)
{
break;
}
else if(m==n)
{
d[i].push_back(c[j]);
}
}
}
}
}
for(int i=0;i<d.size();i++)
{
if(d[i].empty())
{
d.erase(d.begin()+i);
c.erase(c.begin()+i);
i=-1;
}
}
if(d.empty())
{
cout<<0;
break;
}
int w=0;
while(d.size())
{
int f=10000,g;
for(int i=0;i<d.size();i++)
{
if(d[i].size()<f)
{
f=d[i].size();
g=i;
}
}
int h=0;
for(int i=0;i<d.size();i++)
{
int u=0;
if(i!=g)
{
for(int j=0;j<d[i].size();j++)
{
if(d[i][j]==d[g][0])
{
d[i].erase(d[i].begin()+j);
u++;
}
else if(d[i][j]==c[g])
{
d[i].erase(d[i].begin()+j);
u++;
}
if(u==2)
{
break;
}
}
}
}
int x=-1;
for(int i=0;i<c.size();i++)
{
if(d[g][0]==c[i])
{
d.erase(d.begin()+i);
c.erase(c.begin()+i);
x=i;
break;
}
}
if(x>=0&&x<g)
{
c.erase(c.begin()+g-1);
d.erase(d.begin()+g-1);
w++;
}
else
{
c.erase(c.begin()+g);
d.erase(d.begin()+g);
w++;
}
for(int i=0;i<d.size();i++)
{
if(d[i].empty())
{
c.erase(c.begin()+i);
d.erase(d.begin()+i);
i=-1;
}
}
}
cout<<w;
}
}