Pagini recente » Cod sursa (job #2204719) | Cod sursa (job #1450650) | Cod sursa (job #1192668) | Cod sursa (job #3216125) | Cod sursa (job #273678)
Cod sursa(job #273678)
#include <cstdio>
const int NMAX = 100000;
const int VMAX = 1000001;
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 = 2; i <= m; ++i) {
for (int j = i; j <= m; j += i) {
c[i] += ex[j];
}
}
for (int i = 2; i <= m; ++i) {
if (p[i] == 0) {
for (int j = i+i; j <= m; j += i) {
if (p[j] != -1 && j % (i*i) != 0)
++p[j]; else
p[j] = -1;
}
}
}
long long bad = 0;
for (int i = 2; i <= m; ++i) {
if (p[i] >= 0) {
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;
}