Pagini recente » Cod sursa (job #2345300) | Cod sursa (job #3198871) | Cod sursa (job #447503) | Cod sursa (job #500803) | Cod sursa (job #2217216)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("pairs.in");
ofstream fout ("pairs.out");
const int NMAX = 1000000;
int prime[NMAX + 2];
long long ans;
void ciur () {
for (int i = 2; i <= NMAX; i++)
if (!prime[i]) {
for (int j = i; j <= NMAX; j += i) {
prime[j]++;
if (j / i % i == 0)
prime[j] = -NMAX;
}
}
}
int n, f[NMAX + 2], x;
int main() {
ciur();
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> x;
f[x] = 1;
}
for (int i = 2; i <= NMAX; i++) {
if (prime[i] > 0) {
int nr = 0;
for (int j = i; j <= NMAX; j += i)
nr += f[j];
if (prime[i] % 2 == 1)
ans += 1LL * nr * (nr - 1) / 2;
else
ans -= 1LL * nr * (nr - 1) / 2;
}
}
fout << 1LL * n * (n - 1) / 2 - ans;
return 0;
}