Cod sursa(job #293516)

Utilizator vladbBogolin Vlad vladb Data 1 aprilie 2009 21:27:35
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<stdio.h>

long long r;
long n,c[1000001],max,p[1000001];
bool fr[1000001];

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