import std.algorithm;
import std.array;
import std.ascii;
import std.container;
import std.conv;
import std.math;
import std.numeric;
import std.random;
import std.range;
import std.stdio;
import std.string;
import std.typecons;
import core.bitop;

void log(A...)(A arg) {
    stderr.writeln(arg);
}
int size(T)(in T s) {
    return cast(int)s.length;
}

import std.bigint;

long modPow(long x, long n, long mod) {
    if (n == 0) return 1;
    if (n % 2 == 0) {
        auto y = BigInt(x) ^^ 2;
        return modPow(y % mod, n / 2, mod);
    } else {
        auto y = BigInt(x) * modPow(x, n - 1, mod);
        return y % mod;
    }
}
bool isPrime(long n) {
    if (n == 2) return true;
    if (n % 2 == 0) return false;
    long s = bsf(n);
    long t = (n - 1) / (1L << s);
    bool test() {
        long b = uniform(2, n);
        if (modPow(b, t, n) == 1) return true;
        foreach (r; 0 .. s) {
            if (modPow(b, (1L<<r) * t, n) == n - 1) return true;
        }
        return false;
    }
    foreach (_; 0 .. 100) {
        if (! test()) return false;
    }
    return true;
}

void main() {
    int N = readln.chomp.to!int;
    int ans = 0;
    foreach (i; 0 .. N) {
        int x = readln.chomp.to!int;
        if (isPrime(x)) ans++;
    }
    writeln(ans);
}