#include<stdio.h>
#include<math.h>
 
#define N 200005

int extDivisor(int t, int *listDivisor){
  int iDivisor=0;
  int a = sqrt(t);
  for(int j=2; j<=a; j++){
    if(t%j==0){
      if(j*j==t){
         listDivisor[iDivisor] = j;
         iDivisor++;
      }
      else{
        listDivisor[iDivisor] = j;
        listDivisor[iDivisor+1] = t/j;
        iDivisor+=2;
      }
    }
  }
//  printf("%d ",t); for(int j=0; j<iDivisor; j++){printf("%d ",listDivisor[j]);} printf("\n");
  return iDivisor;
}

int compare_int(const void *a, const void *b)
{
    return *(int*)a - *(int*)b;
}
 
int main(){
  int n, a[N], cnt[N]={0}, nDivisor, listDivisor[2000]={0}, isDivide[N]={0}, sum=0, maxNo=0;
  scanf("%d", &n);
  for(int i=0; i<n; i++){
    scanf("%d", &a[i]);
  }
  
  // 入力数列にどの数字がいくつあるか
  for(int i=0; i<n; i++){
    cnt[a[i]-1]++;
    if(a[i]>maxNo){
      maxNo=a[i];
    }
  }
  // 数列に1があれば面倒な処理いらない
  if(cnt[0]==1){
    printf("%d",1);      
    return 0;
  }
  else if(cnt[0]>1){
    printf("%d",0);      
    return 0;
  }
//  for(int i=0; i<maxNo; i++){printf("%d ",cnt[i]);} printf("\n");
  // 入力数列に含まれる数字に対し、約数を全出力し、入力数字に存在するか調べる
  for(int i=2; i<=maxNo; i++){
    if(cnt[i-1]==0){
      continue;
    }
    if(cnt[i-1]>1){
      isDivide[i-1]=1; 
    }
    nDivisor = extDivisor(i, listDivisor); // 約数のリスト作成(1と自分自身はリストに含まない)
//    printf("%d ",i); for(int j=0; j<nDivisor; j++){printf("%d ",listDivisor[j]);} printf("\n");
    for(int j=0; j<nDivisor; j++){
//      printf("%d %d\n", i, listDivisor[j]);
      if(cnt[listDivisor[j]-1]!=0){  // 約数の中に入力数値が含まれている場合
//        printf("%d %d\n", i+1, listDivisor[j]);
        isDivide[i-1]=1;               // 割り切れる数は存在する
        break;
      }
    }     
  }

  for(int i=0; i<maxNo; i++){
//    printf("%d ",isDivide[i]);   
    if(isDivide[i]==0){
      sum += cnt[i];
    }
  }
  
  printf("%d",sum);      
  return 0;
}