void main(){
	long n = _scan!long();
	long[] a = _scanln!long();
	a.sort!("a < b");
	bool[] dp = new bool [ a[$-1] + 1 ]; // a[]のmax分要素を確保 
	fill(dp, true);
	long cnt = 0; // 条件を満たすものの個数=ans
	long prev = 0; // ひとつ前の値保存用
	// エラトステネスの篩の適用
	foreach(i,elm; a){
		if(dp[elm] == false)continue;
		// 同じ値の場合処理をスキップ
		if(prev == elm)continue;
		prev = elm;
		cnt++;
		for(long j=2; elm*j < dp.length; j++){	
			dp[elm*j] = false;	
		}
	}
	cnt.writeln();
}

import std.stdio, std.conv, std.algorithm, std.numeric, std.string;

// 1要素のみの入力
T _scan(T= int)(){
	return to!(T)( readln().chomp() );
}

// 1行に同一型の複数入力
T[] _scanln(T = int)(){
	T[] ln;
	foreach(string elm; readln().chomp().split()){
		ln ~= elm.to!T();
	}
	return ln;
}
