Cod sursa(job #557790)

Utilizator Eugen01Vasilescu Eugen Eugen01 Data 16 martie 2011 21:10:12
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <stdio.h>
#define Nmax 100009
#define Max 1000000
#define LL long long

int nr,max=0,i,j,n,k,c[Max],d[Nmax];
bool a[Max],b[Max],ok[Max];
LL sol;

int main()
{
	freopen("pairs.in","r",stdin);
	freopen("pairs.out","w",stdout);
	scanf("%d",&n);

	for (i=1;i<=n;i++)
	{
		scanf("%d",&d[i]);
		a[d[i]]=true;
		if (d[i]>max) max=d[i];
	}
	for (i=2;i<=max;i++)
		if (!(b[i]))
			for (j=1;j<=max/i;j++)
			{
				b[i*j]=true;
				if (!(j%i)) ok[i*j]=true;
				c[i*j]++;
			}
	for (i=2;i<=max;i++)
		if (!ok[i])
		{
			nr=0;
			for (j=1;j<=n;j++)
				if (!(d[j]%i)) nr++;
			if (c[i]%2) sol+=((LL)nr*(nr-1)/2);
				else sol-=((LL)nr*(nr-1)/2);
		}
	printf("%lld",(n*(n-1)/2)-sol);
	return 0;
}