Pagini recente » Cod sursa (job #445341) | Cod sursa (job #2535321) | Cod sursa (job #180079) | Cod sursa (job #2152737) | Cod sursa (job #2217215)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("pairs.in");
ofstream fout ("pairs.out");
const int NMAX = 1000000;
int prime[NMAX + 2], 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 += nr * (nr - 1) / 2;
else
ans -= nr * (nr - 1) / 2;
}
}
fout << n * (n - 1) / 2 - ans;
return 0;
}