# include <iostream>
# include <math.h>
# include <vector>
using namespace std;

bool is_prime(int num)
{
if(num == 1)
return false;
for(int i = 2; i * i <= num; i++)
if (num % i == 0)
return false;
return true;
}
bool find(int odd, vector<int>& evens, vector<bool>& used, vector<int>& match)
{
for(int i = 0; i < evens.size(); i++)
{
if(is_prime(odd + evens[i]) && !used[i])
{
used[i] = true;
if(match[i] == 0 || find(match[i], evens, used, match)) //先到先得,能让则让
{
match[i] = odd;
return true;
}
}
}
return false;
}
int main()
{
int n, temp;
while(cin >> n)
{
vector<int> odds, evens;
for(int i = 0; i < n; i++)
{
cin >> temp;
if(temp % 2)
odds.push_back(temp);
else
evens.push_back(temp);
}
if(!odds.size() || !evens.size())
{
cout << 0 << endl;
continue;
}
// 暴力匈牙利算法进行匹配
vector<int> match(evens.size(), 0);
int count = 0;
for(int odd:odds)
{
vector<bool> used(evens.size(), false); //每一轮偶数都没用过(能让则让)
if(find(odd, evens, used, match))
count++;
}
cout << count << endl;
}
return 0;
}
# include <iostream>
# include <math.h>
# include <vector>
using namespace std;

bool is_prime(int num)
{
if(num == 1)
return false;
for(int i = 2; i * i <= num; i++)
if (num % i == 0)
return false;
return true;
}
bool find(int index, vector<int>& evens, vector<bool>& used, vector<int>& match, vector<vector<bool>>& map)
{
for(int i = 0; i < evens.size(); i++)
{
if(map[i][index] && !used[i])
{
used[i] = true;
if(match[i] == -1 || find(match[i], evens, used, match, map)) //先到先得,能让则让
{
match[i] = index;
return true;
}
}
}
return false;
}

void map_h(vector<int> odds, vector<int> evens, vector<vector<bool>>& map)
{
for(int i = 0; i < evens.size(); i++)
for(int j = 0; j < odds.size(); j++)
if(is_prime(odds[j] + evens[i]))
map[i][j] = true;
}

int main()
{
int n, temp;
while(cin >> n)
{
vector<int> odds, evens;
for(int i = 0; i < n; i++)
{
cin >> temp;
if(temp % 2)
odds.push_back(temp);
else
evens.push_back(temp);
}
if(!odds.size() || !evens.size())
{
cout << 0 << endl;
continue;
}
vector<vector<bool>> map(evens.size(), vector<bool>(odds.size(), false));
map_h(odds, evens, map);
// 哈希表优化的匈牙利算法进行匹配
vector<int> match(evens.size(), -1);
int count = 0;
for(int i = 0; i < odds.size(); i++)
{
vector<bool> used(evens.size(), false); //每一轮偶数都没用过(能让则让)
if(find(i, evens, used, match, map))
count++;
}
cout << count << endl;
}
return 0;
}