Cod sursa(job #365635)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 19 noiembrie 2009 14:57:22
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include<stdio.h>
int n,max;
int v[100002];
int f[1<<20],nr[1<<20],d[1<<20];

inline int calc(int x)
{
	return x*(x-1)/2;
}

void rez()
{
	int i,j,k,sol=0;
	for(i=2;i<=max;i++)
		if(!d[i])
		{
			for(k=i*i;k<=max;k+=i*i)
				d[k]=-1;
			for(j=i;j<=max;j+=i)
				d[j]=d[j]+(d[j]>=0);
		}
	for(i=2;i<=max;i++)
		if(d[i]>=0)
			sol=sol+(d[i]&1)?calc(nr[i]):(-1*calc(nr[i]));
	printf("%d\n",(calc(n)-sol)/2);
}

int main()
{
	freopen("pairs.in","r",stdin);
	freopen("pairs.out","w",stdout);
	scanf("%d",&n);
	int i,j;
	for(i=1;i<=n;i++)
	{
		scanf("%d",&v[i]);
		f[v[i]]++;
		if(v[i]>max)
			max=v[i];
	}
	for(i=2;i<=max;i++)
		for(j=i;j<=max;j+=i)
			nr[i]+=f[j];
	rez();
	return 0;
}