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 Rust (judge verdict: Accepted)

/* ALDS1_1_C: Prime Numbers - http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_1_C

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
*/

use std::io::*;

fn is_prime(n: u32) -> bool {
    if n == 0 { return false }
    if n == 1 { return false }
    if n == 2 { return true } 
    if n == 3 { return true } 
    if n%2 == 0 { return false }
    let mut i = 3;
    loop {
        if n%i == 0 { return false }
        i += 2;
        if i * i > n { break; }
    }
    return true;
}
 
fn main() {
    let stdin = stdin();
    let mut lines = stdin.lock().lines().map(|l| l.unwrap());
    let N = lines.next().unwrap().parse().unwrap();
    let nums = lines.take(N).map(|s| s.parse::<u32>().unwrap());

    let mut ans = 0;
    for i in nums {
        if is_prime(i) {
            ans += 1;
        }
    }

    println!("{}", ans);
}

// ------------------------------------------------------------------
// Auxiliary methods.
fn array_to_str(arr: &Vec<i32>) -> String {
    // Converts a numerical array to a string for output purposes.
    let mut ans = String::new();
    for a in arr {
        ans.push_str(&format!("{} ", *a));
    }
    return ans.trim().to_string();
}

fn read_line() -> String {
    let mut return_ = format!("");
    std::io::stdin().read_line(&mut return_).ok();
    return_
}