Pagini recente » Cod sursa (job #1767691) | Cod sursa (job #1269538) | Cod sursa (job #1734148) | Cod sursa (job #3243750) | Cod sursa (job #2735383)
#include <iostream>
#include <cstdio>
using namespace std;
const int NRMAX = 1e6 - 1;
int n, x, M, fr[NRMAX + 1], nrdivpr[NRMAX + 1];
bool bad[NRMAX + 1];
int main()
{
freopen("pairs.in", "r", stdin);
freopen("pairs.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i <= n; ++i) scanf("%d", &x), ++fr[x], M = max(M, x);
long long ans = n * (n - 1) / 2;
for(int i = 2; i <= M; ++i)
if(!bad[i]) {
long long crt = 0;
bool isPr = !nrdivpr[i];
for(int j = i; j <= M; j += i) {
if(isPr) {
++nrdivpr[j];
if(j % (i * i) == 0) bad[j] = 1;
}
crt += fr[j];
}
if(nrdivpr[i] % 2) ans -= crt * (crt - 1) / 2;
else ans += crt * (crt - 1) / 2;
}
printf("%lld", ans);
return 0;
}