Cod sursa(job #2513557)

Utilizator MateiAruxandeiMateiStefan MateiAruxandei Data 23 decembrie 2019 13:39:00
Problema Pairs Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>
#include <iostream>

#define dbg(x) cerr << #x << ": " << x << endl;
#define NMAX 100005
using namespace std;

long long nrBad;
int v[NMAX], nrD[NMAX * 10], maxx, X[NMAX * 10];
bool viz[NMAX * 10], exist[NMAX * 10];

int main(){
	freopen("pairs.in", "r", stdin);
	freopen("pairs.out", "w", stdout);
	int n;
	cin >> n;

	for(int i = 1; i <= n; ++i){
		cin >> v[i];
		maxx = max(maxx, v[i]);
		exist[v[i]] = 1;
	}

	long long nrPerechiNonBune = 0;
	for(int i = 2; i <= maxx; ++i)
		if(nrD[i] == 0){
			long long cnt = 0, cnt2 = 0;
			for(int j = i; j <= maxx; j += i)
			{
				nrD[j]++;
				if(j % (i * i) == 0)
					viz[j] = 1;
			}
		}
	
	for(int i = 2; i <= maxx; ++i){
		int cnt = 0;
		for(int j = i; j <= maxx; j += i)
			if(exist[j])
				++cnt;
		X[i] = cnt;
	}

	long long rez = 0;
	for(int i = 2; i <= maxx; ++i)
		if(!viz[i]){
			if(nrD[i] % 2 == 0)
				rez -= ((X[i] - 1) * X[i]) / 2;
			else rez += ((X[i] - 1) * X[i]) / 2;
		}
		
	cout << (1LL * (n - 1) * n) / 2 - rez << '\n';
	return 0;
}