# 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 ;
}