Cod sursa(job #1982599)

Utilizator eilerGabriel-Ciprian Stanciu eiler Data 19 mai 2017 16:28:49
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <fstream>
using namespace std;

int n, mx, nrd[1000001];
bool inM[1000001];

int main(){
	int i, j, x;
	long long r, q;

	ifstream fin ("pairs.in");
	fin >> n;
	for (i=0; i<n; i++){
		fin >> x;
		inM[x]=true;
		mx=max(mx, x);
	}
	fin.close();

	nrd[0]=nrd[1]=-1;
	for (i=2; i<=mx; i++)
		if (nrd[i]==0){
			for (j=i; j<=mx; j+=i)
				nrd[j]++;
		}

	for (i=2; i*i<=mx; i++)
			for (j=i*i; j<=mx; j+=i*i)
				nrd[j]=-1;

	r=0;
	for (i=1; i<=mx; i++)
		if (nrd[i]!=-1){
			q=0;
			for (j=i; j<=mx; j+=i)
				if (inM[j]==true)
					q++;
			q=(q-1)*q/2;
			if (nrd[i]%2==0)
				r-=q;
			else
				r+=q;
		}

	ofstream fout ("pairs.out");
	fout << 1LL*n*(n-1)/2-r << '\n';
	fout.close();

	return 0;
}