Pagini recente » Cod sursa (job #3213448) | Cod sursa (job #2470693) | Cod sursa (job #208928) | Cod sursa (job #2189925) | Cod sursa (job #486289)
Cod sursa(job #486289)
#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 < 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;
}