Pagini recente » Cod sursa (job #1742794) | Cod sursa (job #534584) | Cod sursa (job #694930) | Cod sursa (job #819035) | Cod sursa (job #273508)
Cod sursa(job #273508)
#include <cstdio>
const int NMAX = 100000;
const int VMAX = 1000000;
int n,m;
int v[NMAX], c[VMAX], p[NMAX];
bool ex[VMAX];
int main() {
freopen("pairs.in","rt",stdin);
freopen("pairs.out","wt",stdout);
scanf("%d",&n);
m = 0;
for (int i = 0; i < n; ++i) {
scanf("%d",&v[i]);
ex[v[i]] = true;
if (m < v[i])
m = v[i];
}
for (int i = 1; i <= m; ++i) {
c[i] = 0;
for (int j = i; j <= m; j += i) {
if (ex[j])
++c[i];
}
}
for (int i = 2; i <= m; ++i) {
if (p[i] == 0) {
for (int j = i+i; j <= m; ++j) {
if (p[j] != -1) {
if (j % (i*i)) {
++p[j];
} else {
p[j] = -1;
}
}
}
}
}
long long bad = 0;
for (int i = 2; i <= m; ++i) {
if (p[i] >= 0) {
p[i] = 1;
if (p[i] % 2)
bad += (long long)c[i] * (c[i]-1) / 2; else
bad -= (long long)c[i] * (c[i]-1) / 2;
}
}
long long rez = (long long)n*(n-1)/2 - bad;
printf("%lld\n",rez);
return 0;
}