Cod sursa(job #214240)
#include<stdio.h>
#define lg 1000002
int i, x, mxx, k, j, d[lg], cnt[lg], ind;
bool este[lg], prim[lg];
long long n, rsp;
inline int max(int a, int b){
return a > b ? a : b;
}
int main()
{
freopen("pairs.in", "rt", stdin);
freopen("pairs.out", "wt", stdout);
scanf("%lld", &n);
for (i = 1; i <= n; i ++){
scanf("%d", &x);
mxx = max(mxx, x); este[x] = 1;
}
for (i = 2; i*i <= mxx; i ++)
if (!prim[i])
for (k = 2; k*i <= mxx; k ++)
prim[k*i] = 1;
prim[1] = 1;
for (i = 1; i <= mxx; i ++){
for (k = 1; i*k <= mxx; k ++){
if (este[i*k] == 1)
d[i] ++;
if (!prim[i])
if (k % i != 0)
cnt[i*k] ++;
else
cnt[i*k] = -0x3f3f3f3f;
}
}
/*
for (i = 2; i <= mxx; i ++)
printf("numarul cu %d %d\n", i, d[i]);
printf("%d\n", rsp);
printf("%d\n", ind);
*/
for (i = 2; i <= mxx; i ++){
d[i] = (d[i] * (d[i] + 1)) / 2;
if (cnt[i] > 0)
if (cnt[i] % 2 == 0)
rsp -= d[i];
else
rsp += d[i];
}
printf("%lld\n", (n*(n+1)) / 2 - rsp);
return 0;
}