Cod sursa(job #957046)

Utilizator rudarelLup Ionut rudarel Data 4 iunie 2013 13:13:32
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>
#define ll long long
 
bool v[1000001];
 
ll ciur[1000001];
 
int main()
{
 
    ll m=0,n=0,i,j,x,t,sol=0;
 
    freopen("pairs.in","r",stdin);
    freopen("pairs.out","w",stdout);
 
    scanf("%lld\n",&n);
 
    sol=n*(n-1)/2;
 
    for (i=1;i<=n;++i)
    {
 
        scanf("%lld",&x);
 
        v[x]=1;
 
        if (x>m)
 
            m=x;
 
    }
 
    for (i=2;i<=m;++i)
        if (!ciur[i])
            for (j=i;j<=m;j+=i)
                ++ciur[j];
 
    for (i=2;i*i<=m;++i)
        for (j=i*i;j<=m;j+=i*i)
            ciur[j]=-1;
 
    for (i=2;i<=m;++i)
        if (ciur[i]!=-1)
        {
 
            t=0;
 
            for (j=i,t=0;j<=m;j+=i)
                if (v[j])
                    ++t;
 
            sol-=((ciur[i]%2)*2-1)*t*(t-1)/2;//formula
 
        }
 
    printf("%lld\n",sol);
 
    return 0;
 
}