Pagini recente » Cod sursa (job #2843390) | Cod sursa (job #1136714) | Cod sursa (job #393018) | Cod sursa (job #2368843) | Cod sursa (job #486288)
Cod sursa(job #486288)
#include <cstdio>
#include <cstring>
#define VMAX 1000050
int nr[VMAX], n, i, j, x;
char P[VMAX], exp[VMAX], viz[VMAX];
long long sol;
int main () {
freopen ("pairs.in", "r", stdin);
freopen ("pairs.out", "w", stdout);
scanf ("%d", &n);
for (i = 1; i <= n; i++) {
scanf ("%d", &x);
nr[x]++;
}
sol = (long long) n * (long long) (n-1) / 2LL;
for (i = 2; i < MAX; i++) {
for (j = 2 * i; j < VMAX; j += i)
nr[i] += nr[j];
if (!P[i]) {
exp[i] = 1;
for (j = 2 * i; j < VMAX; j += i) {
P[j] = 1;
if ((j/i) % i == 0) viz[j] = 1;
exp[j] ^= 1;
}
}
if (viz[j] == 1) continue;
if (exp[i])
sol -= ((long long) nr[i] * (long long) (nr[i]-1) / 2LL);
else
sol += ((long long) nr[i] * (long long) (nr[i]-1) / 2LL);
}
printf ("%lld\n", sol);
return 0;
}