Pagini recente » Cod sursa (job #685785) | Cod sursa (job #1669929) | Cod sursa (job #2004361) | Cod sursa (job #2359883) | Cod sursa (job #995838)
Cod sursa(job #995838)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("pairs.in");
#ifdef INFOARENA
ofstream fout("pairs.out");
#else
#define fout cout
#endif
const int MAX_N = 100005;
const int MAX_V = 1000006;
int n;
int apr[MAX_V];
int a[MAX_N];
bool prime[MAX_V];
int good[MAX_V];
int dvs[MAX_V];
long long soln;
void read() {
fin >> n;
for (int i = 1; i <= n; ++i) {
fin >> a[i];
++apr[a[i]];
}
fin.close();
}
void make_pr() {
for (int i = 2; i < MAX_V; ++i) {
dvs[i] += apr[i];
if (!prime[i]) {
good[i] = 1;
for (int j = i + i; j < MAX_V; j += i) {
prime[j] = true;
if ( (j / i) % i ) {
++good[j];
} else {
good[j] = -MAX_V;
}
dvs[i] += apr[j];
}
}
}
}
void solve() {
soln = 1LL * n * (n - 1) / 2LL;
for (int i = 2; i <= MAX_V; ++i) {
if (good[i] > 0) {
if (good[i] % 2) {
soln -= 1LL * dvs[i] * (dvs[i] - 1) / 2LL;
} else {
soln += 1LL * dvs[i] * (dvs[i] - 1) / 2LL;
}
}
}
}
void write() {
fout << soln << '\n';
#ifdef INFOARENA
fin.close();
#endif
}
int main() {
read();
make_pr();
solve();
write();
}