枚举每个数字是否在集合中。
#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);
}
}

本文介绍了一种通过枚举每个数字的因子,并统计这些因子出现次数的方法。利用这种方法可以找出给定范围内有多少个数的因子个数是唯一的,即没有其他数与其拥有相同数量的因子。该方法首先对每个输入的整数进行因子分解,然后更新因子的出现次数。
1650

被折叠的 条评论
为什么被折叠?



