Problem:
Score : 400 points

Problem Statement

Given is a number sequence A of length N.

Find the number of integers i \left(1 \leq i \leq N\right) with the following property:

For every integer j \left(1 \leq j \leq N\right) such that i \neq j , A_j does not divide A_i.

Constraints

All values in input are integers.

1 \leq N \leq 2 \times 10^5

1 \leq A_i \leq 10^6

Input

Input is given from Standard Input in the following format:

N
A_1 A_2 \cdots A_N

Output

Print the answer.

Sample Input 1

5
24 11 8 3 16

Sample Output 1

3

The integers with the property are 2, 3, and 4.

Sample Input 2

4
5 5 5 5

Sample Output 2

0

Note that there can be multiple equal numbers.

Sample Input 3

10
33 18 45 28 8 19 89 86 2 4

Sample Output 3

5

Solution in OCaml (4.10.0) (judge verdict: Accepted)

let split_string ?(pattern="") = Str.split @@ Str.regexp pattern
let n = Scanf.sscanf (read_line ()) "%d" @@ fun n -> n
let a = read_line () |> split_string ~pattern:" " |> List.map int_of_string |> List.sort compare

let vs = Array.make 1_000_001 false

let rec devideable i x =
  if i * i > x then false
  else if x mod i <> 0 then devideable (i + 1) x
  else vs.(i) || vs.(x / i) || devideable (i + 1) x

let rec loop ans = function
  | [] -> Printf.printf "%d\n" ans
  | (x, cnt) :: xs ->
    let d = devideable 1 x in 
    vs.(x) <- true;
    if cnt > 1 || d then loop ans xs
    else loop (ans + 1) xs

let () = 
  let rec f = function
    | (acc, []) -> acc
    | ((v, cnt) :: accs as acc, x :: xs) ->
      if x = v then f ((v, cnt + 1) :: accs, xs)
      else f ((x, 1) :: acc, xs)
    | _ -> failwith ""
  in
  loop 0 (List.rev (f ([(List.hd a, 1)], List.tl a)))