Cod sursa(job #557799)

Utilizator Eugen01Vasilescu Eugen Eugen01 Data 16 martie 2011 21:17:32
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <stdio.h>
#define Nmax 100009
#define Max 1000009
#define LL long long

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

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

	for (i=1;i<=n;i++)
	{
		scanf("%lld",&q);
		a[q]=true;
		if (q>max) max=q;
	}
	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<=max/i;j++)
				if (a[i*j]) nr++;
			if (c[i]%2) sol+=((LL)nr*(nr-1)/2);
				else sol-=((LL)nr*(nr-1)/2);
		}
	printf("%lld",((LL)n*(n-1)/2)-sol);
	return 0;
}