Problem:
Prime Numbers

A prime number is a natural number which has exactly two distinct natural number divisors: 1 and itself. For example, the first four prime numbers are: 2, 3, 5 and 7.

Write a program which reads a list of N integers and prints the number of prime numbers in the list.

Input

The first line contains an integer N, the number of elements in the list.

N numbers are given in the following lines.

Output

Print the number of prime numbers in the given list.

Constraints

1 ≤ N ≤ 10000

2 ≤ an element of the list ≤ 108

Sample Input 1

5
2
3
4
5
6

Sample Output 1

3

Sample Input 2

11
7
8
9
10
11
12
13
14
15
16
17

Sample Output 2

4

Solution in C (judge verdict: Time Limit Exceeded)

#include <stdio.h>
#include <math.h>

#define NUM_MIN ( ( int ) 1 )
#define NUM_MAX ( ( int ) 10000 )
#define INT_MIN ( ( int ) 2 )
#define INT_MAX ( ( int ) 100000000 )

typedef enum
{
	kSuccess,
	kError
}Result;

Result checkNumRange( int num, int min, int max );
int isPrimeNum( int num );

int main( void )
{
	int i;
	int num;
	int array[NUM_MAX];
	int primeNumCount = 0;

	scanf( "%d\n", &num );
	if( checkNumRange( num, NUM_MIN, NUM_MAX ) == kError )
	{
		return -1;
	}

	for( i = 0; i < num; num++ )
	{
		scanf( "%d\n", &array[i] );
		if( checkNumRange( array[i], INT_MIN, INT_MAX ) == kError )
		{
			return -1;
		}

		if( isPrimeNum( array[i] ) == 0 )
		{
			++primeNumCount;
		}
	}

	printf( "%d\n", primeNumCount );

	return 0;
}

Result checkNumRange( int num, int min, int max )
{
	return ( ( num >= min ) && ( num <= max ) ) ? kSuccess : kError;
}

int isPrimeNum( int num )
{
	int i;

	if( num == 2 )
	{
		return 0;
	}

	if( ( num < 2 ) || ( ( num % 2 ) != 0 ) )
	{
		return -1;
	}

	for( i = 3; i <= (int)sqrt( (double)num ); i += 2 )
	{
		if( ( num % i ) == 0 )
		{
			return -1;
		}
	}

	return 0;
}