枚举每个数字是否在集合中。
#include<bits/stdc++.h>
using namespace std;
const int MAXN=100100;
const int MAXM=1000100;
int a[MAXN],sum[MAXM];
int main()
{
int n,i,j,ans,limit;
while(~scanf("%d",&n))
{
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
{
limit=sqrt(a[i]);
for(j=1;j<=limit;j++)
{
if(a[i]%j==0)
{
sum[j]++;
sum[a[i]/j]++;
}
}
if(limit*limit==a[i])
sum[limit]--;
}
ans=0;
for(i=1;i<MAXM;i++)
{
if(!sum[i])
continue;
for(j=i+i;j<MAXM;j+=i)
{
if(sum[i]==sum[j])
break;
}
if(j>=MAXM)
ans++;
}
printf("%d\n",ans);
}
}