using System;
using System.Collections.Generic;
using System.Linq;

namespace HJ28
{
    internal class Program
    {
        /// <summary>素数伴侣类,记录了能够配成素数化伴侣的奇数偶数 </summary>
        class PrimeCompanion
        {
            public int OddNumber;
            public int EvenNumber;

            public PrimeCompanion()
            {

            }

            public PrimeCompanion(int oddNumber, int evenNumber)
            {
                OddNumber = oddNumber;
                EvenNumber = evenNumber;
            }
        }

        static void Main(string[] args)
        {
            string inuptStr = Console.ReadLine();
            int count = int.Parse(inuptStr);
            inuptStr = Console.ReadLine();
            string[] strings = inuptStr.Split();

            //分奇偶两组数去匹配,因为奇数+奇数=偶数 偶数+偶数=偶数 偶数就不是素数
            //奇数数字列表
            List<int> oddNumbers = new List<int>();
            //偶数数字列表
            List<int> evenNumbers = new List<int>();
            for (int i = 0; i < strings.Length; i++)
            {
                int number = int.Parse(strings[i]);
                if (number % 2 == 0)
                {
                    evenNumbers.Add(number);
                }
                else
                {
                    oddNumbers.Add(number);
                }
            }

            //用于记录偶数匹配了哪个奇数,如果奇数部分值不为零,则是匹配上了
            List<PrimeCompanion> companions = new List<PrimeCompanion>();
            for (int i = 0;i < evenNumbers.Count; i++)
            {
                companions.Add(new PrimeCompanion(0, evenNumbers[i]));
            }

            for (int i = 0; i < oddNumbers.Count; i++)
            {
                //每一个奇数都需要重置匹配标记,因为是新的匹配,不能让以前的匹配记录影响结果
                bool[] isVisited = new bool[evenNumbers.Count];
                FindMatch(oddNumbers[i], evenNumbers, isVisited, companions);
            }

            //前面我们已经将素数对的偶数部分全部赋值,因此此时只需要判断奇数部分不为0则说明配对成功
            Console.WriteLine(companions.Where(x => x.OddNumber != 0).Count());

        }

        static bool FindMatch(int x, List<int> evenNumbers, bool[] isVisited, List<PrimeCompanion> matches)
        {
            for (int i = 0; i < evenNumbers.Count; i++)
            {
                //假如没有进行匹配过,并且能匹配上,先打上标记,并没有定下这一配对
                if (isVisited[i] == false && IsPrime(x + evenNumbers[i]))
                {
                    isVisited[i] = true;

                    //这里开始决定是否定下配对
                    //假如i位置的偶数没有匹配,直接让该位置的偶数与x匹配:先到先得
                    //或者i位置的偶数已经匹配上了一奇数,并且这个奇数能重新找到匹配,则让出:能让则让,从而达到最大匹配
                    if (matches[i].OddNumber == 0 || FindMatch(matches[i].OddNumber, evenNumbers, isVisited, matches))
                    {
                        matches[i].OddNumber = x;
                        return true;
                    }
                }
            }
            return false;
        }

        /// <summary> 判断一个数是否为素数 </summary>
        static bool IsPrime(int number)
        {
            if (number <= 1)
            {
                return false;
            }

            //这里有一个公理,一个数最多只有一个大于它的平方根的约数,
            //另一个约数一定小于它的平方根,
            //因此我们只需要遍历它的平方根次就能知道它是否是素数,减少遍历时间
            for (int i = 2; i < Math.Sqrt(number) + 1; i++)
            {
                if (number % i == 0)
                {
                    return false;
                }
            }
            return true;
        }

    }
}