Pagini recente » Cod sursa (job #1750479) | Cod sursa (job #556048) | Cod sursa (job #2258709) | Cod sursa (job #227983) | Cod sursa (job #121495)
Cod sursa(job #121495)
#include <stdio.h>
#include <string.h>
const int N_MAX = 100010;
int v[N_MAX], is[N_MAX * 10], cate[N_MAX * 10];
int main()
{
freopen("pairs.in", "r", stdin);
#ifndef _SCREEN_
freopen("pairs.out", "w", stdout);
#endif
int N, i, MAX = 0, j;
scanf("%d\n", &N);
for (i = 1; i <= N; i ++) {
scanf("%d ", &v[i]);
is[v[i]] = 1;
if (v[i] > MAX) MAX = v[i];
}
for (i = 2; i <= MAX; i ++) {
for (j = i; j <= MAX; j += i) {
cate[i] += is[j];
}
}
memset(is, 0, sizeof(is));
for (i = 2; i <= MAX; i ++) {
if (is[i] == 0) {
for (j = i + i; j <= MAX; j += i) {
if ((is[j] != -1) && j % (i * i) != 0) is[j] ++;
else is[j] = -1;
}
}
}
int nrb = 0, P;
long long rez = 0;
for (P = 2; P <= MAX; P ++) {
if (is[P] >= 0) {
nrb = is[P];
if (nrb == 0) nrb = 1;
if (nrb % 2 == 1) rez += (long long) ((long long) cate[P] * (long long) (cate[P] - 1) / 2);
else rez -= (long long) ((long long) cate[P] * (long long) (cate[P] - 1) / 2);
}
}
long long kkt;
kkt = N;
kkt *= (long long) N - 1;
kkt /= 2;
printf("%lld\n", kkt - rez);
return 0;
}