Cod sursa(job #360478)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 31 octombrie 2009 17:34:42
Problema Pairs Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include<stdio.h>
#include<string.h>
long n,i,a,f[1000050],x[1000050],j,max;
long long s;
int main()
{
 freopen("pairs.in","r",stdin);
 freopen("pairs.out","w",stdout);
 scanf("%ld",&n);
 for(i=1;i<=n;++i)
    {scanf("%ld",&a);
     if(a>max)max=a;
     f[a]=1;}
 for(i=2;i<=max;++i)
    for(j=i;j<=max;j+=i)
       x[i]+=f[j];
 memset(f,0,sizeof(f));
 long long ii,jj;
 for(ii=2;ii<=max;++ii)
    if(f[ii]==0)
      for(jj=ii;jj<=max;jj+=ii)
         {if(jj%(ii*ii)==0)f[jj]=-1;
          if(f[jj]>-1)f[jj]++;}
 for(i=2;i<=max;++i)
    if(f[i]>0)
      if(f[i]%2)s+=((long long)x[i]*(x[i]-1)/2);
           else s-=((long long)x[i]*(x[i]-1)/2);
 printf("%lld\n",(long long)(n*(n-1)/2)-s);
 return 0;
}