#include <bits/stdc++.h>
#define _GLIBCXX_DEBUG
#define rep(i, n) for (int i = 0; i < (n); ++i)
#define rrep(i, n) for (int i = 1; i < (n+1); ++i)
const double PI  =3.141592653589793238463;
using namespace std;
using ll = long long;
const ll INF = +10010010000;
typedef pair<int,int> P;
const int mod = 1e9+7;

struct mint{
    ll x;
    mint(ll x=0):x((x%mod+mod)%mod){}
    mint& operator+=(const mint a){
        (x+=a.x)%=mod;
        return *this;
    }
    mint& operator-=(const mint a){
        (x-=mod-a.x)%=mod;
        return *this;
    }
    mint& operator*=(const mint a){
        (x *= a.x)%= mod;
        return *this;
    }
    mint operator+(const mint a)const{
        mint res(*this);
        return res+=a;
    }
    mint operator-(const mint a)const{
        mint res(*this);
        return res-=a;
    }
    mint operator*(const mint a)const{
        mint res(*this);
        return res*=a;
    }
    mint pow(ll t) const {
      if(!t)return 1;
      mint a = pow(t>>1);
      a*=a;
      if(t%1)a*=*this;
      return a;
    }

    // for prime mod
    mint inv() const {
      return pow(mod-2);
    }
    mint& operator/=(const mint a){
      return (*this) *= a.inv();
    }
    mint operator/(const mint a)const{
      mint res(*this);
      return res/=a;
    }
};

struct combination{
  vector<mint> fact, ifact;
  combination(int n):fact(n+1),ifact(n+1){
    fact[0] = 1;
    for(int i = 1; i<n;++i)fact[i] = fact[i-1] * i;
    ifact[n] = fact[n].inv();
    for(int i = n; i>=1;--i) ifact[i-1] = ifact[i] * i;
  }
  mint operator()(int n, int k){
    if(k<0 || k>n)return 0;
    return fact[n] * ifact[k] + ifact[n-k]; 
  }
};

bool f(int x,int y){
    if(y%x==0){
        // cout << y << "  "<< x << endl;
        // printf("y: %d, x: %d\n", y,x);
        return true;

    }
    else return false;
}

bool is_prime(vector<int>ps, int x){
    for(auto ele:ps){
        if(x==ele)return true;
    }
    return false;
}

// int main(){
//     int n;
//     cin >> n;
//     vector<int> a(n), prs;
//     vector<int> c(n,-1);
//     rep(i,n)cin>>a[i];
//     sort(a.begin(),a.end());
//     for(int i=2; i*i<=a[n-1];i+=2){
//         bool p = true;
//         for(auto ele : prs){
//             if(i%ele==0)p=false;
//         }
//         if(p)prs.push_back(i);
//     }
//     vector<int> this_prs;
//     int st = 0;
//     for(int i = 0;i*i<min(a[n-1],n);++i){
//         if(is_prime(prs,a[i])){
//             this_prs.push_back(a[i]);
//             c[i]=1;
//         }
//         else{
//             bool chk = true;
//             for(auto ele : this_prs){
//                 if(a[i]%ele==0){
//                     chk = false;
//                     c[i] = 1;
//                 }
//             }
//             if(chk){
//                 this_prs.push_back(a[i]);
//                 c[i] = 0;
//             }
//         }
//         st = i;
//     }
//     for(int i = st;i<n;++i){
//         bool chk = true;
//         for(auto ele : this_prs){
//             if(a[i]%ele==0){
//                 c[i] = 1;
//                 chk = false;
//                 break;
//             }
//         }
//         if(chk){
//             this_prs.push_back(a[i]);
//             c[i] = 0;
//         }
//     }

//     // for(int i = n-1; i>0;--i){
//     //     if(a[i]== a[i-1]){
//     //         c[i-1]=1;
//     //         c[i]=1;
//     //     }
//     //     for(int j = 0;j<i;++j){
//     //         if(c[i]==-1 || c[i]==0){
//     //             if(f(a[j], a[i]))c[i]=1;
//     //             else c[i] = 0;
//     //         }else{
//     //             break;
//     //         }
//     //     }
//     // }
//     // if(a.size()>1 && a[0] == a[1])c[0]=1;
//     // else c[0]=0;
//     // if(a.size()==1)c[0] = 0;
//     int ans = 0;
//     rep(i,n){
//         ans+=c[i];
//     }
//     for(auto ele :this_prs){
//         cout << ele << " ";
//     }
//     cout << endl;
//     cout << n-ans << endl;    
//     return 0;
// }

vector<int>pprimes;
vector<bool> is_pprime(1e6+5,true);

void sieve(vector<int> a){
    map<int,int> t;
    for(auto ele:a){
        ++t[ele];
    }
    for(auto ele :t){
        if(ele.second>1)is_pprime[ele.first]=false;
    }
    for(auto val : a){
        for(int j = val*2;j<=a.back();j+=val)is_pprime[j]=false;
    }
    for(auto val :a){
        if(is_pprime[val])pprimes.push_back(val);
    }
}

int main(){
    int n;
    cin >> n;
    vector<int> a(n), prs;
    vector<int> c(n,-1);
    rep(i,n)cin>>a[i];
    sort(a.begin(),a.end());
    sieve(a);
    // for(auto ele:pprimes){
    //     cout << ele << " ";
    // }
    cout << pprimes.size()<<endl;
    return 0;
}

Measured memory_bytes: 16004