Pagini recente » Istoria paginii utilizator/anahita2004 | Monitorul de evaluare | Cod sursa (job #1584448) | Diferente pentru warm-up-2019/solutii/shoturi intre reviziile 97 si 98 | Cod sursa (job #2693485)
#include <bits/stdc++.h>
#define ll long long
#define LMAX 1000005
using namespace std;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
bool exista[LMAX], viz[LMAX];
int n, el, maxim, nr_prime[LMAX];
ll ans;
int main() {
cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> el;
exista[el] = true;
maxim = max(maxim, el);
}
for (int i = 2; i <= maxim; ++i) {
if (viz[i])
continue;
ll cnt = 0;
for (int j = i; j <= maxim; j += i) {
if (nr_prime[i] == 0) {
++nr_prime[j];
if (j % (i * i) == 0)
viz[j] = true;
}
cnt += exista[j];
}
if (nr_prime[i] % 2 != 0)
ans += cnt * (cnt - 1) / 2;
else
ans -= cnt * (cnt - 1) / 2;
}
cout << (ll)n * (n - 1) / 2 - ans;
return 0;
}