Cod sursa(job #494869)

Utilizator darrenRares Buhai darren Data 23 octombrie 2010 11:32:59
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <algorithm>

using namespace std;

int N;
int V[200002], divX[1000002];
int Max;
bool is[1000002], prim[1000002], facP[1000002]; // facP - ma folosesc de overflow.
long long tot;

int main()
{
	ifstream fin("pairs.in");
	ofstream fout("pairs.out");

	fin >> N;
	for (int i = 1; i <= N; ++i)
	{
		fin >> V[i];
		is[V[i]] = true;
		Max = max(Max, V[i]);
	}

	divX[1] = N;
	for (int i = 2; i <= Max; ++i)
		if (!prim[i])
		{
			divX[i] = is[i];
			++facP[i];

			for (int j = 2; i * j <= Max; ++j)
			{
				prim[i * j] = true;
				++facP[i * j];
				divX[i] += is[i * j];
			}
		}

	for (int i = 2; i <= Max; ++i)
		tot += (facP[i] == true ? 1 : -1) * (long long) divX[i] * (long long) (divX[i] - 1) / 2;

	fout << (long long)(N * (N - 1) / 2) - tot;

	fin.close();
	fout.close();
}