Pagini recente » Cod sursa (job #1811394) | Cod sursa (job #1791586) | Cod sursa (job #587268) | Cod sursa (job #1057325) | Cod sursa (job #2938820)
#include <iostream>
#include <fstream>
#include <unordered_set>
using namespace std;
constexpr size_t MAX_N = 1e5 + 5;
constexpr size_t LIM = 1e6l;
long long ans, cnt;
int N, i, j, val, max_val;
bool sieve[LIM + 5];
unordered_set<int> M;
static inline void read() {
ifstream fin("pairs.in");
fin >> N;
for (i = 1; i <= N; i++) {
fin >> val;
max_val = max(max_val, val);
M.insert(val);
}
fin.close();
}
static inline void write() {
ofstream fout("pairs.out");
fout << ans;
fout.close();
}
static inline void solve() {
ans = N * (N - 1) / 2;
for (i = 2; i * i <= LIM; i++)
if (sieve[i] == false) {
cnt = 0;
for (j = i; j <= LIM && j <= max_val; j += i) {
sieve[j] = true;
if (M.find(j) != M.end())
cnt++;
}
ans -= cnt * (cnt - 1) / 2;
}
}
int main() {
read();
solve();
write();
return 0;
}