Cod sursa(job #979924)

Utilizator stefan.friptuPetru Stefan Friptu stefan.friptu Data 3 august 2013 14:48:59
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<stdio.h>
 
char f[1000002];
long long v[1000002];
long long n,maxim=0,i,j,s,x;

int main()
{
    freopen("pairs.in","r",stdin);
    freopen("pairs.out","w",stdout);
    
    scanf("%lld",&n);
    s=n*(n-1)/2;
	
    for(i=1;i<=n;++i)
    {
        scanf("%lld",&x);
        f[x]=1;
        if(x>maxim)
            maxim=x;
    }
    for(i=2;i<=maxim;++i)
        if(v[i]==0)
            for(j=i;j<=maxim;j=j+i)
                ++v[j];
    for(i=2;i*i<=maxim;++i)
        for(j=i*i;j<=maxim;j=j+i*i)
            v[j]=-1;
    for(i=2;i<=maxim;++i)
        if(v[i]!=-1)
        {
            x=0;
            for(j=i;j<=maxim;j=j+i)
                if(f[j])
                    ++x;
            s-=((v[i]%2)*2-1)*x*(x-1)/2;
        }
    printf("%lld\n",s);
    return 0;
}