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 Go (1.14.1) (judge verdict: Runtime Error)

package main

import (
	"fmt"
	"sort"
)

func main() {
	arr := scanNums(1)
	N := arr[0]
	As := scanNums(N)
	MySort(As)
	stack := []int{}
	index := 0
	if len(As) == 0 {
		fmt.Print(0)
		return
	}
	db := 0
	for {
		if index >= len(As) {
			break
		}
		primer := As[index]
		stack = As[:index+1]
		tmp := 0
		if index+1 <= len(As) && As[index+1] == primer {
			db++
		}
		for i := index + 1; i < len(As); i++ {
			if As[i]%primer != 0 {
				stack = append(stack, As[i])
				continue
			}
		}
		As = stack
		if index >= 1 && primer*As[index-1] > As[len(As)-1] {
			break
		}
		if tmp > 0 {
			tmp--
		}
		index = index + tmp + 1
	}
	fmt.Print(len(As) - db)
}
func MySort(a []int) {
	sort.Slice(a, func(i, j int) bool { return a[i] < a[j] })

}
func Abs(i int) int {
	if i < 0 {
		return -1 * i
	}
	return i
}
func Min(a, b int) int {
	if a < b {
		return a
	}
	return b
}
func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}
func CalcNum(tate int, yoko int, A int, B int, dp *map[[2]int]int) int {
	if (*dp)[[2]int{tate, yoko}] != 0 {
		return (*dp)[[2]int{tate, yoko}]
	}
	return yoko*CalcNum(tate-1, yoko, A, B, dp) + tate*CalcNum(tate, yoko-1, A, B, dp)
}
func scanNums(len int) (nums []int) {
	var num int
	for i := 0; i < len; i++ {
		fmt.Scan(&num)
		nums = append(nums, num)
	}
	return
}