Cod sursa(job #2192744)

Utilizator WebDesignbyTMGhiorghiu Ioan-Viorel WebDesignbyTM Data 7 aprilie 2018 00:54:17
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#define DM (int) 1e6+1
#define DN (int) 1e5+1
#include <fstream>
#include <vector>
using namespace std;

ifstream fi ("pairs.in");
ofstream fo ("pairs.out");
int n, v[DN], p[DM];
long long tot;
vector <int> dv;

void pinex()
{
	int bz = (1 << dv.size()) - 1, msk, aux, pr;
	for (msk = 1; msk <= bz; ++msk)
	{
		aux = 1;
		pr = 0;
		for (int hlp = 0; hlp < dv.size(); ++hlp)
			if (msk & (1<<hlp))
			{
				++pr;
				aux *= p[dv[hlp]] - 1;
			}
		if (pr&1)
			tot += 1LL*aux;
		else
			tot -= 1LL*aux;
	}
}

int main()
{
	fi >> n;
	for (int i = 1; i <= n; ++i)
		fi >> v[i];
	for (int i = 1; i <= n; ++i)
		for (int j = 1; j*j <= v[i]; ++j)
			if (v[i]%j == 0)
			{
				++p[j];
				if (j*j != v[i])
					++p[v[i]/j];
			}
	for (int i = 1; i <= n; ++i)
	{
		for (int j = 2; j*j <= v[i]; ++j)
		{
			if (v[i]%j == 0)
				dv.push_back(j);
			while (v[i]%j == 0)
				v[i] /= j;
		}
		if (v[i] != 1)
			dv.push_back(v[i]);
		pinex();
		dv.clear();
	}
	fo << tot;
	return 0;
}