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: Memory Limit Exceeded)

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

#define LINE_BUF_SIZE 1024
#define N 100000000


int flag[N + 1] = {0};

int main(){
  //const int data_num = 100;
  //int data[data_num] = {5, 6, 8};

  int ans = 0;
  int i, j;
  for (i = 1; i < N + 1; i++)
    flag[i] = 1;
  flag[1] = 0;

  for (i = 1; i < sqrt(N + 1); i++){
    if (flag[i] == 1)
      for (j = 2; i * j < N +1; j++)
        flag[i * j] = 0;
  }

//  for (i = 1; i < 100; i++)
//    printf("%d, %d\n", i, flag[i]);

  // データ読み込み
  //for (i = 0; i < data_num; i++)
  int data;
  static char line[LINE_BUF_SIZE];
  while(fgets(line, sizeof(line), stdin) != NULL) {
    if (sscanf(line, "%d", &data) != 1) {
      fputs("sscanf: Convert error\n", stderr);
      return EXIT_FAILURE;
    }
    if (flag[data] == 1)
      ans++;
  }
  printf("%d\n", ans);

  return 0;
}