Pagini recente » Cod sursa (job #2466718) | Cod sursa (job #563400) | Cod sursa (job #2347880) | Cod sursa (job #958403) | Cod sursa (job #2676736)
#include <bits/stdc++.h>
#define ll long long
#define LMAX 1000005
using namespace std;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
ll n, perechi, v[100005], fv[LMAX], fv2[LMAX], fv3[LMAX];
std::vector<ll> prim;
void ciur() {
for (ll i = 2; i * i <= LMAX; i += 2) {
if (fv[i])
continue;
prim.push_back(i);
for (ll j = i * i; j <= LMAX; j += i)
fv[j] = 1;
if (i == 2)
--i;
}
return;
}
int main() {
ciur();
fin >> n;
for (int i = 1; i <= n; ++i) {
fin >> v[i];
ll divs = 0;
for (int j = 0; j < prim.size() && prim[j] <= v[i]; ++j) {
if (v[i] % prim[j] != 0)
continue;
++divs;
perechi += fv2[prim[j]];
++fv2[prim[j]];
}
perechi -= fv3[v[i]] * divs;
++fv3[v[i]];
}
ll a = 1, b = 1;
for (ll j = 2; j <= n; ++j) {
a *= j;
if (j <= n - 2)
b *= j;
}
fout << a / (2 * b) - perechi;
return 0;
}