#include <bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
#define ff first
#define ss second
#define pb push_back
#define eb emplace_back
#define pii pair<int, int>
#define pll pair<long long,long long>
#define vl vector<long long>
#define vll vector<pll>
#define vi vector<int>
#define vii vector<pii>
#define sws ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define endl '\n'
#define tcase int tt; cin>>tt; while(tt--)
#define tcase2 int tt; cin>>tt; for(int qq=1;qq<=tt;qq++)
using namespace std;
typedef long long int ll;
typedef  unsigned long long int ull;
typedef long double ld;
const int MAX = 1000010;
const int MOD2 = 998244353;
const int MOD = 1000000007; 
const int INF = 1e8;    
const ll LLINF = 0x3f3f3f3f3f3f3f3f;
const ld EPS = 1e-7;
// Extra
#define forn(i, n) for(int i = 0; i < (int)n; i++)
#define forne(i, a, b) for(int i = a; i <= b; i++)
#define all(x) x.begin(), x.end()   
#define trav(a, x) for(auto& a : x)
#define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator<string> _it(_ss); err(_it, args); }
void err(istream_iterator<string> it) {}
template<typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
	cerr<< *it << " = " << a << endl;
	err(++it, args...);
}
using namespace __gnu_pbds;
template<typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
// const int MAX_PR = 1e6+2;
// bitset<MAX_PR> isprime;
// vi eratosthenes_sieve(int lim) 
// {
//     isprime.set(); isprime[0] = isprime[1] = 0;
//     for (int i = 4; i < lim; i += 2) 
//         isprime[i] = 0;
//     for (int i = 3; i*i < lim; i += 2) 
//         if (isprime[i])
//             for (int j = i*i; j < lim; j += i*2) 
//                 isprime[j] = 0;
//     vi pr;
//     forne(i,2,lim-1) 
//         if (isprime[i]) pr.push_back(i);
//     return pr;
// }
int main()
{
    sws
    // vi primes=eratosthenes_sieve(MAX_PR);
    // int n;
    // cin>>n;
    // vi a(n);
    // int la=primes.size();
    // vector<vector<int>> prdist(n,vector<int> (la,0));
    // vi sum(la,0);
    // forn(i,n)
    // {
    //     cin>>a[i];
    //     int c=a[i];
    //     for(int z=0;primes[z]*primes[z]<=a[i];z++)
    //     {
    //         if(c%primes[z]==0)
    //         {
    //             while(c%primes[z]==0)
    //             {
    //                 c/=primes[z];
    //             }
    //             prdist[i][z]++;
    //         }
    //     }
    //     if(c!=1)
    //     {
    //         int ind=lower_bound(all(primes),c)-primes.begin();
    //         prdist[i][ind]++;
    //     }
    // }
    // forn(i,la)
    // {
    //     forn(j,n)
    //     {
    //         sum[i]+=prdist[j][i];
    //     }
    // }
    // int ans=0;
    // forn(i,n)
    // {
    //     bool pos=true;
    //     forn(j,la)
    //     {
    //         if(prdist[i][j]>0 and sum[j]>1)
    //         {
    //             pos=false;
    //             break;
    //         }
    //     }
    //     if(pos)
    //         ans++;
    // }
    // forn(i,n)
    // {
    //     forn(j,10)
    //     {
    //         cout<<prdist[i][j]<<" ";
    //     }
    //     cout<<endl;
    // }
    // cout<<ans<<endl;

    int n;
    cin>>n;
    set<int> a;
    set<int> rep;
    int lo;
    vector<int> check;
    forn(i,n)
    {
        cin>>lo;
        if(a.find(lo)==a.end())
            a.insert(lo);
        else
        {
            rep.insert(lo);
        }
    }
    if(a.find(1)!=a.end())
    {
        if(rep.find(1)==rep.end())
        {
            cout<<1<<endl;
        }
        else
        {
            cout<<0<<endl;
        }
        return 0 ;
    }
    vi ans;
    for(auto x: a)
    {
        bool pos=true;
        if(rep.find(x)!=rep.end())
        {
            pos=false;
            check.push_back(x);
            continue;
        }
        for(int i=2;i*i<=x;i++)
        {
            if(x%i==0)
            {
                if(binary_search(all(check),i) or binary_search(all(check),x/i))
                {
                    // error(x,i);
                    pos=false;
                    break;
                }
            }
        }
        check.push_back(x);
        if(pos)
            ans.push_back(x);
        // error()
    }
    cout<<ans.size()<<endl;

    return 0;
}


Measured memory_bytes: 14376