N = int(eval(input()))

A = [0] + list(map(int, input().split()))

A.sort()

A_max = A[-1]

dp = [1] * (1 + A_max)

from bisect import bisect_left, bisect_right



for x in A[1:]:

    if dp[x] == 0:

        continue

    y = x * 2

    while y <= A_max:

        dp[y] = 0

        y += x

ans = []

for i in range(1, A_max+1):

    if dp[i] == 1:

        idx_l = bisect_left(A, i)

        idx_r = bisect_right(A, i)

        if idx_r - idx_l > 1:

            continue

        if A[idx_l] == i:

            ans.append(idx_l)

print((len(ans)))

from collections import Counter

N = int(eval(input()))

A = list(map(int, input().split()))

A.sort()

A_max = A[-1]

dp = [1]*(A_max+1)

# dp[i] = 1: iはAのどの要素の倍数でもない

# dp[i] = 0: iはAの要素の倍数である

for a in A:

    if not dp[a]:

        continue

    y = a*2

    while y <= A_max:

        dp[y] = 0

        y += a

# Aの要素それぞれについて、dp[a] = 1ならよいが

# Aの要素ai,ajでai=ajとなる場合、上の篩では通過しているのに

# 条件を満たさない

cnt = dict(Counter(A))

ans = 0

for a in A:

    if cnt[a] >= 2:

        continue

    if dp[a]:

        ans += 1

print(ans)
N = int(eval(input()))
A = [0] + list(map(int, input().split()))
A.sort()
A_max = A[-1]
dp = [1] * (1 + A_max)
from bisect import bisect_left, bisect_right

for x in A[1:]:
    if dp[x] == 0:
        continue
    y = x * 2
    while y <= A_max:
        dp[y] = 0
        y += x
ans = []
for i in range(1, A_max + 1):
    if dp[i] == 1:
        idx_l = bisect_left(A, i)
        idx_r = bisect_right(A, i)
        if idx_r - idx_l > 1:
            continue
        if A[idx_l] == i:
            ans.append(idx_l)
print((len(ans)))

from collections import Counter

N = int(eval(input()))
A = list(map(int, input().split()))
A.sort()
A_max = A[-1]
dp = [1] * (A_max + 1)
# dp[i] = 1: iはAのどの要素の倍数でもない
# dp[i] = 0: iはAの要素の倍数である
for a in A:
    if not dp[a]:
        continue
    y = a * 2
    while y <= A_max:
        dp[y] = 0
        y += a
# Aの要素それぞれについて、dp[a] = 1ならよいが
# Aの要素ai,ajでai=ajとなる場合、上の篩では通過しているのに
# 条件を満たさない
cnt = dict(Counter(A))
ans = 0
for a in A:
    if cnt[a] >= 2:
        continue
    if dp[a]:
        ans += 1
print(ans)

+from collections import Counter + -A = [0] + list(map(int, input().split())) +A = list(map(int, input().split())) -dp = [1] * (1 + A_max) -from bisect import bisect_left, bisect_right - -for x in A[1:]: -    if dp[x] == 0: +dp = [1] * (A_max + 1) +# dp[i] = 1: iはAのどの要素の倍数でもない +# dp[i] = 0: iはAの要素の倍数である +for a in A: +    if not dp[a]: -    y = x * 2 +    y = a * 2 -        y += x -ans = [] -for i in range(1, A_max + 1): -    if dp[i] == 1: -        idx_l = bisect_left(A, i) -        idx_r = bisect_right(A, i) -        if idx_r - idx_l > 1: -            continue -        if A[idx_l] == i: -            ans.append(idx_l) -print((len(ans))) +        y += a +# Aの要素それぞれについて、dp[a] = 1ならよいが +# Aの要素ai,ajでai=ajとなる場合、上の篩では通過しているのに +# 条件を満たさない +cnt = dict(Counter(A)) +ans = 0 +for a in A: +    if cnt[a] >= 2: +        continue +    if dp[a]: +        ans += 1 +print(ans)