Pagini recente » Cod sursa (job #3130487) | Cod sursa (job #270015) | Cod sursa (job #1582497) | Cod sursa (job #1951829) | Cod sursa (job #3196868)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define int ll
#define pb push_back
const string FILE_NAME = "pairs";
const int MAX_VAL = 1e6;
int cnt[MAX_VAL + 5];
bool ciur[MAX_VAL + 5];
vector<int> primes, divisors;
signed main() {
#ifndef LOCAL
ifstream cin(FILE_NAME + ".in");
ofstream cout(FILE_NAME + ".out");
#endif
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n, i, d, j, k, num, nr, ans;
for (d = 2; d * d <= MAX_VAL; d++) {
if (!ciur[d]) {
for (i = d * d; i <= MAX_VAL; i += d) {
ciur[i] = true;
}
}
}
for (d = 2; d <= MAX_VAL; d++) {
if (!ciur[d]) {
primes.pb(d);
}
}
cin >> n;
ans = 0;
for (i = 0; i < n; i++) {
cin >> num;
divisors.clear();
for (int prime : primes) {
if (num == 1) {
break;
}
if (!ciur[num]) {
divisors.pb(num);
break;
}
if (num % prime == 0) {
divisors.pb(prime);
while (num % prime == 0) {
num /= prime;
}
}
}
/* bit mask */
for (j = 0; j < (1 << (divisors.size())); j++) {
nr = 1;
for (k = 0; k < divisors.size(); k++) {
if (j & (1 << k)) {
nr *= divisors[k];
}
}
if (__builtin_popcount(j) & 1) {
ans -= cnt[nr];
} else {
ans += cnt[nr];
}
cnt[nr]++;
}
}
cout << ans;
return 0;
}