Cod sursa(job #116077)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 17 decembrie 2007 19:17:21
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include<stdio.h>
long int n,i,a,fr[1000002],max,val[1000002],j,nd[1000002],x;
long long int xx,res,sol,nn;
int main()
{
	FILE *f,*g;f=fopen("pairs.in","r");g=fopen("pairs.out","w");
	fscanf(f,"%ld",&n);
	for(i=1;i<=n;i++)
	{
		fscanf(f,"%ld",&a);fr[a]=1;
		max=(max>a)?max:a;
	}
	for(i=1;i<=max;i++)val[i]=i;
	for(i=2;i<=max;i++)
	{ if(val[i]==i)
	   for(j=i;j<=max;j=j+i)
	     { nd[j]++;
	       val[j]/=i;
	     }
	   else
	    if(val[i]!=1)
	     nd[i]=0;
	   if(nd[i])
	   { x=0;
	     for(j=i;j<=max;j=j+i)
	     x+=fr[j];
	     xx=(long long int)x;
	     if(nd[i]%2)res+=xx*(xx-1)/2;
	     else res-=xx*(xx-1)/2;
	   }
	}
	nn=(long long int)n;
	sol=nn*(nn-1)/2-res;
	fprintf(g,"%lld\n",sol);
	fcloseall();
	return 0;
}