Pagini recente » Cod sursa (job #336817) | Cod sursa (job #1215380) | Cod sursa (job #824589) | Cod sursa (job #1879928) | Cod sursa (job #160741)
Cod sursa(job #160741)
#include <stdio.h>
#define NM 1000002
int v[NM],p[200],a[NM],d[NM];
long n,max;
int main()
{freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
scanf("%ld",&n);
long x,i,j,k,sw,aux,mult;
for (i=1;i<=n;i++)
{scanf("%ld",&x);
a[x]=1;
if(x>max) max=x;
}
for (i=2;i<=max;i++)
for (j=1;j<=max/i;j++)
if(a[i*j]) d[i]++;
k=1;p[1]=2;
for (i=3;i<=1000;i++)
{sw=1;
j=1;
while (p[j]*p[j]<=i)
{if(i%p[j]){sw=0;break;}
else j++;
}
if(sw) p[++k]=i;
}
long long rez=0;
for (i=2;i<=max;i++)
{aux=i;sw=1;
j=1;k=0;
while(p[j]*p[j]<=aux&&sw)
{mult=0;
while(aux%p[j]==0)
{mult++;
aux/=p[j];
}
if(mult>1) sw=0;
else {j++;
if(mult==1) k++;
}
}
if(sw&&aux>1) k++;
if(sw)
{if(k%2==0) rez-=(long long)d[i]*(d[i]-1)/2;
else rez+=(long long)d[i]*(d[i]-1)/2;
}
}
rez=(long long)n*(n-1)/2-rez;
printf("%lld",rez);
return 0;
}