Pagini recente » Cod sursa (job #1981525) | Cod sursa (job #2802180) | Cod sursa (job #424595) | Cod sursa (job #862158) | Cod sursa (job #2376843)
#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 <= m; ++d) {
if (lo[d]) continue;
for (int i = d; i <= m; i += d) {
if (i % (1LL * d * d) == 0)
mu[i] = 0;
lo[i] = d;
mu[i] *= -1;
}
}
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];
divs.push_back(p);
while (x % p == 0)
x /= p;
}
for (int msk = 0; msk < (1 << divs.size()); ++msk) {
int now = 1;
for (int i = 0; i < (int)divs.size(); ++i) {
if (msk & (1 << i))
now *= divs[i];
}
cnt[now] += 1;
}
}
long long ans = 0;
for (int d = 1; d <= m; ++d) {
ans += 1LL * mu[d] * cnt[d] * (cnt[d] - 1) / 2;
}
cout << ans << endl;
return 0;
}