Pagini recente » Cod sursa (job #2092852) | Cod sursa (job #771990) | Cod sursa (job #2849251) | Cod sursa (job #2333535) | Cod sursa (job #2735375)
#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;
bool isPr = !nrdivpr[i];
for(int j = i; j <= M; crt += fr[j], j += i)
if(isPr) {
++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;
}