Pagini recente » Cod sursa (job #1630610) | Cod sursa (job #2496655) | Cod sursa (job #2151961) | Cod sursa (job #1662611) | Cod sursa (job #2768710)
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
int fr[1000001];
int n;
int a[100001];
int Max;
long long rez;
void read() {
int i;
ifstream f("pairs.in");
f >> n;
for (i = 1; i <= n; i++) {
f >> a[i];
if (a[i] > Max)
Max = a[i];
fr[a[i]]++;
}
f.close();
}
vector<int> fact[1000001];
void solve() {
int i, j, prod, nr;
for (i = 2; i <= Max; i++)
if (fact[i].size() == 0)
for (j = i; j <= Max; j += i)
fact[j].emplace_back(i);
rez = n * (n - 1) / 2;
for (i = 2; i <= Max; i++) {
prod = 1;
for (j = 0; j < fact[i].size(); j++)
prod = prod * fact[i][j];
if (prod != i)
continue;
nr = 0;
for (j = 1; j * i <= Max; j++)
nr += fr[i * j];
if (fact[i].size() & 1)
rez -= nr;
else rez += nr;
}
}
void output() {
ofstream g("pairs.out");
g << rez;
g.close();
}
int main() {
read();
solve();
output();
return 0;
}