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: Runtime Error)

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

#define LINE_BUF_SIZE 1024
#define N 5000001


unsigned char flag[N] = {0};
static char line[LINE_BUF_SIZE];

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

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

  for (i = 2; i < sqrt(N); i++){
    if (flag[i] == 1){
      //for (j = 2; k < N; j++) {
      for (j = 2; i * j < N; j++) {
        flag[i * j] = 0;
        //k = i * j;
        //flag[k] = 0;
      }
      //printf("%d\n", k);
    }
    //k = 0;
  }

//  for (i = 1; i < 100; i++)
//    printf("%d, %d\n", i, flag[i]);
  //for (i = 0; i < data_num; i++)
  int data;
  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;
}