Pagini recente » Cod sursa (job #1631250) | Cod sursa (job #2427893) | Cod sursa (job #59379) | Cod sursa (job #2136624) | Cod sursa (job #1408315)
#include <fstream>
#include <vector>
#define NMAX 1000001
#define DIM 100001
using namespace std;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
int n;
vector < pair<int, int> > Q;
bool vis[NMAX], ok[NMAX];
int f[NMAX];
int v[DIM];
long long sol;
int main() {
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> v[i];
vis[v[i]] = 1;
}
for (int i = 2; i < NMAX; i++) {
for (int j = i; j < NMAX; j += i) {
if (vis[j])
f[i]++;
}
}
Q.push_back(make_pair(1, 0));
for (int i = 2; i < NMAX; i++) {
if (ok[i])
continue;
for (int j = i + i; j < NMAX; j += i)
ok[j] = 1;
int tempLength = Q.size();
for (int j = 0; j < tempLength; j++) {
if (1LL * Q[j].first * i >= NMAX)
break;
int divisorsCount = Q[j].second + 1;
int divisor = Q[j].first * i;
Q.push_back(make_pair(divisor, divisorsCount));
if (divisorsCount % 2 == 0)
sol -= 1LL * (f[divisor] * (f[divisor] - 1)) / 2;
else
sol += 1LL * (f[divisor] * (f[divisor] - 1)) / 2;
}
}
fout << sol << "\n";
return 0;
}
//Trust me, I'm the Doctor!
//Miriam e tare!