Pagini recente » Cod sursa (job #1463732) | Cod sursa (job #1471546) | Cod sursa (job #2950552) | Cod sursa (job #1567772) | Cod sursa (job #486262)
Cod sursa(job #486262)
#include <cstdio>
#define MAX 1000005
int nr[MAX], n, i, j, x;
char P[MAX], p[MAX], viz[MAX];
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 * (n-1) / 2;
for (i = 2; i < MAX; i++) {
for (j = 2 * i; j < MAX; j += i)
nr[j] += nr[i];
if (!P[i]) {
p[i] = 1;
for (j = 2 * i; j < MAX; j += i) {
P[j] = 1, p[j] ^= 1;
if ((j/2) % 2 == 0) viz[j] = 1;
}
}
if (viz[j] == 1) continue;
if (p[i])
sol -= (long long) nr[i] * (nr[i]-1) / 2;
else
sol += (long long) nr[i] * (nr[i]-1) / 2;
}
printf ("%lld", sol);
return 0;
}