// Original C++ solution (slower):
#include <bits/stdc++.h>

using namespace std;

#define fi first

#define se second

#define countof(array) (sizeof(array) / sizeof(array[0]))

#define rep(i,n) for(int i = 0; i < (n); ++i)

#define rrep(i,n) for(int i = (n)-1; i >= 0; --i)

#define rep2(i,n) for(int i = 1; i <= (n); ++i)

#define rrep2(i,n) for(int i = (n); i > 0; --i)

#define srep(i,s,n) for(int i = s; i < (n); ++i)

#define rsrep(i,s,n) for(int i = (n)-1; i >= s; --i)

#define all(a) (a).begin(),(a).end()

#define rall(a) (a).rbegin(),(a).rend()

#define aall(a) (a), (a)+countof(a)//for array sorting

#define raall(a) (a), (a)+countof(a), greater<>()

#define show(x) cout<<#x<<" = "<<(x)<<endl;

#define vfind(v, a) find(all(v), a) != v.end()

#define yn(f) { if (f) puts("YES"); else puts("NO"); }

#define yns(f) { if (f) puts("Yes"); else puts("No"); }

#define show_ary(...) { cout<<#__VA_ARGS__<<" = "; for (const auto& x : (__VA_ARGS__)) { cout<<x<<" "; } cout<<endl; }

#define show_pair(...) cout<<#__VA_ARGS__<<" = "<<endl; for (const auto& x : (__VA_ARGS__)) { cout<<"  "<<x.fi<<" : "<<x.se<<endl; }

#define out_ary(...) { int n = (__VA_ARGS__).size(); rep(i, n) printf("%d%s", (__VA_ARGS__)[i], i != n-1 ? " " : "\n"); }

#define argmax(v) distance((v).begin(), max_element(all(v)))

#define argmin(v) distance((v).begin(), min_element(all(v)))

#define vmax(v) *max_element(all(v))

#define vmin(v) *min_element(all(v))

typedef long long int ll;

typedef pair<ll, int> P;

typedef vector<P> vpair;

typedef vector<int> vint;

typedef vector<ll> vll;

typedef vector<double> vdouble;

typedef vector<string> vstr;

typedef vector<bool> vbool;

typedef vector<vint> vvint;

typedef vector<vll> vvll;

typedef vector<vstr> vvstr;

typedef vector<vbool> vvbool;

const ll LINF = 2000000000000000000ll;

const int INF = 1000000100;

const ll MOD = 1e9+7;



vector<pair<ll,int>> factorize(ll n) {

    vector<pair<ll,int>> ans;

    for (ll i = 2; i*i <= n; ++i) {

        if (n%i) continue;

        ans.emplace_back(i,0);

        while (n%i == 0) {

            n /= i;

            ans.back().second++;

        }

    }

    if (n != 1) ans.emplace_back(n,1);

    return ans;

}



vll divisor(ll n) {

    vll ans;

    for (ll i = 1; i*i <= n; ++i) {

        if (n%i == 0) {

            ans.push_back(i);

            if (i*i != n) ans.push_back(n/i);

        }

    }

    sort(all(ans));

    return ans;

}



vint c(1e6+1, 0);

bool check(int a) {

    auto d = divisor(a);

    int count = 0;

    for (int x : d) {

        count += c[x];

    }

    if (count > 1) return false;

    return true;

}



int main() {

    int n;

    cin >> n;

    vint a(n);

    rep(i, n) {

        cin >> a[i];

        c[a[i]]++;

    }



    int ans = 0;

    rep(i, n) {

        if (check(a[i])) ans++;

    }



    cout << ans << endl;

    return 0;

}

// Optimized solution to the same problem (faster):
#include <bits/stdc++.h>

using namespace std;

#define fi first

#define se second

#define countof(array) (sizeof(array) / sizeof(array[0]))

#define rep(i,n) for(int i = 0; i < (n); ++i)

#define rrep(i,n) for(int i = (n)-1; i >= 0; --i)

#define rep2(i,n) for(int i = 1; i <= (n); ++i)

#define rrep2(i,n) for(int i = (n); i > 0; --i)

#define srep(i,s,n) for(int i = s; i < (n); ++i)

#define rsrep(i,s,n) for(int i = (n)-1; i >= s; --i)

#define all(a) (a).begin(),(a).end()

#define rall(a) (a).rbegin(),(a).rend()

#define aall(a) (a), (a)+countof(a)//for array sorting

#define raall(a) (a), (a)+countof(a), greater<>()

#define show(x) cout<<#x<<" = "<<(x)<<endl;

#define vfind(v, a) find(all(v), a) != v.end()

#define yn(f) { if (f) puts("YES"); else puts("NO"); }

#define yns(f) { if (f) puts("Yes"); else puts("No"); }

#define show_ary(...) { cout<<#__VA_ARGS__<<" = "; for (const auto& x : (__VA_ARGS__)) { cout<<x<<" "; } cout<<endl; }

#define show_pair(...) cout<<#__VA_ARGS__<<" = "<<endl; for (const auto& x : (__VA_ARGS__)) { cout<<"  "<<x.fi<<" : "<<x.se<<endl; }

#define out_ary(...) { int n = (__VA_ARGS__).size(); rep(i, n) printf("%d%s", (__VA_ARGS__)[i], i != n-1 ? " " : "\n"); }

#define argmax(v) distance((v).begin(), max_element(all(v)))

#define argmin(v) distance((v).begin(), min_element(all(v)))

#define vmax(v) *max_element(all(v))

#define vmin(v) *min_element(all(v))

typedef long long int ll;

typedef pair<int, int> P;

typedef vector<P> vpair;

typedef vector<int> vint;

typedef vector<ll> vll;

typedef vector<double> vdouble;

typedef vector<string> vstr;

typedef vector<bool> vbool;

typedef vector<vint> vvint;

typedef vector<vll> vvll;

typedef vector<vstr> vvstr;

typedef vector<vbool> vvbool;

const ll LINF = 2000000000000000000ll;

const int INF = 1000000100;

const ll MOD = 1e9+7;





int main() {

    int n;

    cin >> n;

    vint a(n);

    rep(i, n) cin >> a[i];



    sort(all(a));

    a.push_back(INF);



    vbool c(1e6+1, true);

    int ans = 0;

    rep(i, n) {

        int t = a[i];

        if (!c[t]) continue;

        if (a[i] != a[i+1]) ans++;

        while (t <= 1e6) {

            c[t] = false;

            t += a[i];

        }

    }



    cout << ans << endl;

    return 0;

}

// Fastest known solution for this problem: