Pagini recente » Cod sursa (job #2383039) | Cod sursa (job #1040776) | Cod sursa (job #1208317) | Cod sursa (job #1565647) | Cod sursa (job #486292)
Cod sursa(job #486292)
#include <cstdio>
#include <cstring>
#define VMAX 1000050LL
char P[VMAX], exp[VMAX], viz[VMAX];
long long nr[VMAX], x, n, i, j, sol;
int main () {
freopen ("pairs.in", "r", stdin);
freopen ("pairs.out", "w", stdout);
scanf ("%lld", &n);
for (i = 1; i <= n; i++) {
scanf ("%lld", &x);
nr[x]++;
}
sol = (long long) n * (long long) (n-1) / 2LL;
for (i = 2; i < VMAX; 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;
}