Pagini recente » Cod sursa (job #2121188) | Cod sursa (job #27152) | cnlr_camp | Cod sursa (job #2931526) | Cod sursa (job #1458967)
#include <cstdio>
using namespace std;
int p[1000001],b[1000001],d[1000001];
int num[100001],apar[1000001];
int n,cap,i,j,nr;
long long sum;
int main()
{
freopen ("pairs.in","r",stdin);
freopen ("pairs.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;i++)
{
scanf("%d",&num[i]);
apar[num[i]]=1;
if (cap<num[i]) cap=num[i];
}
for (i=2;i<=cap;i++)
{
if (p[i]==0)
{
d[i]=1;
for (int j=2;i*j<=cap;j++)
{
if (j%i==0) b[i*j]=1;
p[i*j]=1;
d[i*j]++;
}
}
}
for (i=2;i<=cap;i++)
{
if (b[i]==0)
{
nr=0;
for (j=i;j<=cap;j+=i) if(apar[j]==1) nr++;
if (d[i]%2==1) sum+=(long long)nr*(nr-1)/2;
else sum-=(long long)nr*(nr-1)/2;
}
}
sum=(long long)n*(n-1)/2-sum;
printf("%lld\n",sum);
}