Cod sursa(job #390017)

Utilizator loginLogin Iustin Anca login Data 2 februarie 2010 19:03:27
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
# include <fstream>
using namespace std;
int n, p[1000003], np, x[1000003], nx, v[100003], res, prim[100000], pr, u[1000000];

void read ()
{
	ifstream fin ("pairs.in");
	fin>>n;
	for (int i=1;i<=n;i++)
	{
		fin>>v[i];
		if (v[i]>nx)
			nx=v[i];
	}
}

void prime ()
{
	prim[++pr]=2;
	for (int i=3;i<=nx;i++)
		if (p[i]==0)
		{
			prim[++pr]=i;
			for (int j=2*i;j<=1000000;j+=i)
				p[j]=1;
		}
}

int semn (int q)
{
	int i=1;
	while (q>1)
	{
		if (q%prim[i]==0 && u[prim[i]]==0)
		{
			q/=prim[i];
			u[prim[i]]=88889;
		}
		if (q%prim[i]==0 && p[prim[i]]==0)
			return -1;
		i++;
	}
	return 1;
}
  
int calcul ()
{
	for (int i=1;i<=n;i++)
		for (int j=2;j<=v[i];j++)
			if (v[i]%j==0)
				x[j]++;
	for (int i=2;i<=nx;i++)
		if (x[i])
			res+=(x[i]*(x[i]-1)/2*semn(i));
	if (n%2==0)
		return n/2*(n-1)-res;
	else
		return (n-1)/2*n-res;
}

int main ()
{
	read ();
	prime ();
	ofstream fout ("pairs.out");
	fout<<calcul();
	return 0;
}