n = int(eval(input()))

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



num = max(l)+1

rcd = [0 for _ in range(num)]



for v in l:

    rcd[v] += 1



unq = []

for w in range(num):

    if rcd[w] == 1:

        unq.append(w)

#print(unq)



rcd = [0 for _ in range(num)]

l = set(l)

for x in l:

    for y in range(2*x, num, x):

        rcd[y] = 1

#print(rcd)



ans = 0

for z in unq:

    if rcd[z] == 0:

        ans += 1

print(ans)

# '重複する要素があると条件から逸脱する' と '他の要素が約数になると条件から逸脱する' 

# 上記2つの問題を 前半と後半に分けて処理する、



n = int(eval(input()))

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



# 重複問題

num = max(l)+1

rcd = [0 for _ in range(num)] # indexを数列Aと読み替え可能な配列として初期化



for v in l: # 重複する配列を区別するため各要素数をカウントして...

    rcd[v] += 1



unq = []

for w in range(num): # 重複がない要素のみ'unq'に集約

    if rcd[w] == 1: # 1個の場合のみが該当

        unq.append(w)

#print(unq)



# 約数問題

rcd = [0 for _ in range(num)] # 再度初期化

l = set(l) # ここでは重複を考慮しないため集合化

for x in l: # 自身以外の約数の有無を確認するためのループ

    for y in range(2*x, num, x): # ※自身を約数としてカウントしない工夫！

        rcd[y] = 1 # 自身以外の約数がある場合は'1'が代入される

#print(rcd)



# まとめ

ans = 0

for z in unq: # 'unq'の中で...

    if rcd[z] == 0: # 自身以外に約数を持たない要素のみを...

        ans += 1 # カウント

print(ans)

n = int(eval(input()))
l = list(map(int, input().split()))
num = max(l) + 1
rcd = [0 for _ in range(num)]
for v in l:
    rcd[v] += 1
unq = []
for w in range(num):
    if rcd[w] == 1:
        unq.append(w)
# print(unq)
rcd = [0 for _ in range(num)]
l = set(l)
for x in l:
    for y in range(2 * x, num, x):
        rcd[y] = 1
# print(rcd)
ans = 0
for z in unq:
    if rcd[z] == 0:
        ans += 1
print(ans)

# '重複する要素があると条件から逸脱する' と '他の要素が約数になると条件から逸脱する'
# 上記2つの問題を 前半と後半に分けて処理する、
n = int(eval(input()))
l = list(map(int, input().split()))
# 重複問題
num = max(l) + 1
rcd = [0 for _ in range(num)]  # indexを数列Aと読み替え可能な配列として初期化
for v in l:  # 重複する配列を区別するため各要素数をカウントして...
    rcd[v] += 1
unq = []
for w in range(num):  # 重複がない要素のみ'unq'に集約
    if rcd[w] == 1:  # 1個の場合のみが該当
        unq.append(w)
# print(unq)
# 約数問題
rcd = [0 for _ in range(num)]  # 再度初期化
l = set(l)  # ここでは重複を考慮しないため集合化
for x in l:  # 自身以外の約数の有無を確認するためのループ
    for y in range(2 * x, num, x):  # ※自身を約数としてカウントしない工夫！
        rcd[y] = 1  # 自身以外の約数がある場合は'1'が代入される
# print(rcd)
# まとめ
ans = 0
for z in unq:  # 'unq'の中で...
    if rcd[z] == 0:  # 自身以外に約数を持たない要素のみを...
        ans += 1  # カウント
print(ans)

+# '重複する要素があると条件から逸脱する' と '他の要素が約数になると条件から逸脱する' +# 上記2つの問題を 前半と後半に分けて処理する、 +# 重複問題 -rcd = [0 for _ in range(num)] -for v in l: +rcd = [0 for _ in range(num)]  # indexを数列Aと読み替え可能な配列として初期化 +for v in l:  # 重複する配列を区別するため各要素数をカウントして... -for w in range(num): -    if rcd[w] == 1: +for w in range(num):  # 重複がない要素のみ'unq'に集約 +    if rcd[w] == 1:  # 1個の場合のみが該当 -rcd = [0 for _ in range(num)] -l = set(l) -for x in l: -    for y in range(2 * x, num, x): -        rcd[y] = 1 +# 約数問題 +rcd = [0 for _ in range(num)]  # 再度初期化 +l = set(l)  # ここでは重複を考慮しないため集合化 +for x in l:  # 自身以外の約数の有無を確認するためのループ +    for y in range(2 * x, num, x):  # ※自身を約数としてカウントしない工夫！ +        rcd[y] = 1  # 自身以外の約数がある場合は'1'が代入される +# まとめ -for z in unq: -    if rcd[z] == 0: -        ans += 1 +for z in unq:  # 'unq'の中で... +    if rcd[z] == 0:  # 自身以外に約数を持たない要素のみを... +        ans += 1  # カウント