Pagini recente » Cod sursa (job #1664616) | Cod sursa (job #1522067) | Cod sursa (job #2122390) | Cod sursa (job #1054717) | Cod sursa (job #2735371)
#include <iostream>
#include <cstdio>
using namespace std;
const int NRMAX = 1e6;
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;
for(int j = i; j <= M; crt += fr[j], j += i)
if(!nrdivpr[i]) {
++nrdivpr[j];
if(1ll * j % (1ll * i * i) == 0) bad[j] = 1;
}
if(nrdivpr[i] % 2) ans -= crt * (crt - 1) / 2;
else ans += crt * (crt - 1) / 2;
}
printf("%lld", ans);
return 0;
}