import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
//把这段代码写下来,为了自己不忘记,以备不时之需。欢迎交流指正(参考博客:https://www.cnblogs.com/javawebsoa/archive/2013/07/18/3198816.html)
public class Main {
// 因为要用匈牙利算法, 需要先做成2分图, 2分图就是左右可能存在边,而同侧不能存在边,所以分成奇偶
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
ArrayList<Integer> ji = new ArrayList<>();// 存放奇数
ArrayList<Integer> ou = new ArrayList<>();// 存放偶数
for (int i = 0; i < n; i++) {
int x = sc.nextInt();
if (x % 2 == 0)
ou.add(x);
else
ji.add(x);
}
int[] used = new int[ou.size()]; //0 说明本次没有用过他“***”
int[] alreadyConnect = new int[ou.size()];//alreadyConnect是关键,用来记录已经连好的 边,
int sum = 0;
for (int i = 0; i < ji.size(); i++) { //分成二分图,左侧奇 用来大循环
Arrays.fill(used, 0); //每次要重新置0
if (find(ji.get(i), ou, used, alreadyConnect))
sum++;
}
System.out.println(sum);
}
}
private static boolean find(Integer x, ArrayList<Integer> ou, int[] used, int[] alreadyConnect) {
for (int j = 0; j < ou.size(); j++) { // 扫描每个数
if (isprim(x + ou.get(j)) && used[j] == 0) { //满足结合条件,并且左侧的汉子没有被标记(标记的意思是,试图使该汉子休妻娶另一个中意的妹子,但没有成功,所以没必要浪费功夫)
used[j] = 1;//说明这次 对于i的循环, 此次used[j]=1是用过了
if (alreadyConnect[j] == 0 || find(alreadyConnect[j], ou, used, alreadyConnect)) {
// alreadyConnect[j]=0说明该汉子中意的妹子名花无主, 或 试图使j妹子的原配找下一位夫人,如果能够顺利把该妹子给腾出来,
//那就增加一个左和右相连的边。
alreadyConnect[j] = x;
return true;
}
}
}
return false;
}
private static boolean isprim(Integer x) {
int sum = 0;
for (int i = 2; i <= Math.pow(x, 0.5); i++) {
if (x % i == 0)
return false;
}
return true;
}
}