Pagini recente » Cod sursa (job #1948621) | Cod sursa (job #277713) | Cod sursa (job #1200432) | Cod sursa (job #301826) | Cod sursa (job #2376870)
#include <bits/stdc++.h>
using namespace std;
int main() {
ifstream cin("pairs.in");
ofstream cout("pairs.out");
int m = 1e6;
vector<int> mu(m + 1, 1), lo(m + 1, 0), cnt(m + 1, 0);
for (int d = 2; d * d <= m; ++d) {
if (lo[d]) continue;
for (int i = d * d; i <= m; i += d)
lo[i] = d;
}
int n; cin >> n;
for (int i = 0; i < n; ++i) {
int x; cin >> x;
vector<int> divs;
while (x > 1) {
int p = lo[x] ?: x;
divs.push_back(p);
while (x % p == 0)
x /= p;
}
for (int msk = 0; msk < (1 << divs.size()); ++msk) {
int now = 1, m = 1;
for (int i = 0; i < (int)divs.size(); ++i) {
if (msk & (1 << i)) {
now *= divs[i];
m = -m;
}
}
cnt[now] += 1;
mu[now] = m;
}
}
long long ans = 0;
for (int d = 1; d <= m; ++d) {
if (mu[d])
ans += 1LL * mu[d] * cnt[d] * (cnt[d] - 1) / 2;
}
cout << ans << endl;
return 0;
}