Cod sursa(job #380437)

Utilizator doru.nituNitu Doru Constantin doru.nitu Data 6 ianuarie 2010 09:58:05
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<stdio.h>
#include<algorithm>
#include<bitset>
#include<math.h>
using namespace std;

bitset<1<<20> a;
long long  n,i,j,x[10000100],nr[10000100],ma,rez;

int main()
{
	freopen("pairs.in","r",stdin);
	freopen("pairs.out","w",stdout);
	
	scanf("%lld",&n);
	
	for(i=1;i<=n;++i) {  scanf("%lld",&j);
	                     a[j]=1;
                         ma=max(ma,j);
	                  }
    for(i=2;i<=ma;++i) 
		for(j=i;j<=ma;j+=i) x[i]+=a[j];
	
	for(i=2;i<=ma;++i) 
		if(nr[i]==0) 
		{ for(j=i*i;j<=ma;j+=i*i) nr[j]=-1;
		  for(j=i;j<=ma;j+=i) 
			  if(nr[j]>=0) nr[j]++;
		}
	long long rez=0;	
	for(i=2;i<=ma;++i) 
		if(nr[i]>0)
		{ if(nr[i]%2) rez+=(long long)(x[i]*(x[i]-1))/2;
		  else rez-=(long long)(x[i]*(x[i]-1))/2;
		}
		
	long long t=(long long)n*(n-1);
	t/=2;
    rez=t-rez;
	printf("%lld\n",rez);
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}