从后往前枚举 看他的所有倍数gcd是否是他自己
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
inline char nc(){
static char buf[100000],*p1=buf,*p2=buf;
if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; }
return *p1++;
}
inline void read(int &x){
char c=nc(),b=1;
for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1;
for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b;
}
inline int Gcd(int a,int b){
return !b?a:Gcd(b,a%b);
}
int n,a,maxa;
int tag[1000005];
int main(){
freopen("t.in","r",stdin);
freopen("t.out","w",stdout);
read(n);
for (int i=1;i<=n;i++) read(a),tag[a]=1,maxa=max(a,maxa);
for (int i=maxa;i;i--)
if (!tag[i]){
int tem=0;
for (int j=2;j<=maxa/i;j++)
if (tag[i*j]){
tem=!tem?j:Gcd(j,tem);
if (tem==1) break;
}
if (tem==1)
tag[i]=1;
}
int ans=0;
for (int i=1;i<=maxa;i++)
ans+=tag[i];
printf("%d\n",ans);
}