Problem:
Score : 1200 points

Problem Statement

There are infinitely many cards, numbered 1, 2, 3, ...
Initially, Cards x_1, x_2, ..., x_N are face up, and the others are face down.

Snuke can perform the following operation repeatedly:

Select a prime p greater than or equal to 3. Then, select p consecutive cards and flip all of them.

Snuke's objective is to have all the cards face down.
Find the minimum number of operations required to achieve the objective.

Constraints

1 ≤ N ≤ 100

1 ≤ x_1 < x_2 < ... < x_N ≤ 10^7

Input

Input is given from Standard Input in the following format:

N
x_1 x_2 ... x_N

Output

Print the minimum number of operations required to achieve the objective.

Sample Input 1

2
4 5

Sample Output 1

2

Below is one way to achieve the objective in two operations:

Select p = 5 and flip Cards 1, 2, 3, 4 and 5.

Select p = 3 and flip Cards 1, 2 and 3.

Sample Input 2

9
1 2 3 4 5 6 7 8 9

Sample Output 2

3

Below is one way to achieve the objective in three operations:

Select p = 3 and flip Cards 1, 2 and 3.

Select p = 3 and flip Cards 4, 5 and 6.

Select p = 3 and flip Cards 7, 8 and 9.

Sample Input 3

2
1 10000000

Sample Output 3

4

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<cstdio>
using namespace std;
const int N=110,M=10001000;
int i,j,k,n,nm,ans;
int a[N],fg[M],pr[M/10];
void pre(int n) {
	int i,j;
	fg[1]=1;
	for (i=2;i<=n;i++) {
		if (!fg[i]) pr[++nm]=i;
		for (j=1;j<=nm;j++) {
			if (i*pr[j]>n) break;
			fg[i*pr[j]]=1;
			if (i%pr[j]==0) break;
		}
	}
}
int main() {
	scanf("%d",&n);
	for (i=1;i<=n;i++) scanf("%d",&a[i]);
	pre(a[n]);
	k=a[n]-a[1]+1;
	if (k&1) {
		if (fg[k]) ans=3;
		else ans=1;
	}
	else ans=2;
	for (i=2;i<=n;i++) {
		k=a[i]-a[i-1]-1;
		if (!k) continue;
		if (k&1) {
			if (fg[k]) ans+=3;
			else ans++;
		}
		else ans+=2;
	}
	printf("%d\n",ans);
}