Cod sursa(job #2938820)

Utilizator rastervcrastervc rastervc Data 12 noiembrie 2022 17:01:59
Problema Pairs Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#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;
}