Cod sursa(job #365642)

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

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

void rez()
{
	long long 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)
			if(d[i]&1)
				sol=sol+calc(nr[i]);
			else
				sol=sol-calc(nr[i]);
	printf("%lld\n",calc(n)-sol);
}

int main()
{
	freopen("pairs.in","r",stdin);
	freopen("pairs.out","w",stdout);
	scanf("%d",&n);
	long long i,j;
	for(i=1;i<=n;i++)
	{
		scanf("%lld",&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;
}