Cod sursa(job #202159)
#include <stdio.h>
#define FIN "pairs.in"
#define FOUT "pairs.out"
#define NMAX 1000001
int vec_ap[NMAX];
int N,max;
char prim[NMAX];
char nr[NMAX];
char xor[NMAX];
long long REZ;
int maxim(int a, int b)
{
if (a>b) return a;
else return b;
}
void ciur()
{
int i,j;
for (i=2;i<max+1;++i)
{
for (j=2*i;j<max+1;j+=i)
vec_ap[i]+=vec_ap[j];
if (!prim[i])
{
xor[i]=1;
for (j=2*i;j<max+1;j+=i)
{
prim[j]=1;
if ((j/i)%i==0)
nr[j]=1;
if (xor[j]==1)
xor[j]=0;
else
xor[j]=1;
}
}
if (nr[i]) continue;
if (!xor[i])
REZ+=(long long)vec_ap[i]*(vec_ap[i]-1)/2;
else
REZ-=(long long)vec_ap[i]*(vec_ap[i]-1)/2;
}
}
void read()
{
int i,x;
freopen(FIN,"rt",stdin);
freopen(FOUT,"wt",stdout);
scanf("%d", &N);
for (i=0;i<N;++i)
{
scanf("%d", &x);
vec_ap[x]++;
max=maxim(max,x);
}
}
int main(void)
{
read();
REZ=(long long)N*(N-1)/2;
ciur();
printf("%lld", REZ);
return 0;
}