Cod sursa(job #918018)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 18 martie 2013 16:01:00
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb

#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

ifstream in ("pairs.in");
ofstream out ("pairs.out");

const int N = 1000001 ;

typedef long long I64;

bool X[N];
int A[N],V[N],n;
I64 SOL,M;

void READ ()
{

    in>>n;

    for( I64 x,i=1 ; i <= n ; ++i )
    {
        in>>x;
        X[x]=1;
        M=max(M,x);
    }

}

void SOLVE ()
{

    for( I64 i=2 ; i <= M ; ++i )
        for( I64 j=i ; j <= M ; j+=i )
            A[i]+=X[j];

    for( I64 i=2 ; i <= M ; ++i )
        if( !V[i] )
        {
            for( I64 j=i*i ; j <= M ; j+=i*i )
                V[j]=-1;
            for( I64 j=i ; j <= M ; j+=i )
                if( V[j] >= 0 )
                    ++V[j];
        }

    SOL=1LL*n*(n-1);

    SOL>>=1;

    for( I64 i=2 ; i <= M ; ++i )
        if( V[i] > 0 )
            if( V[i]&1 )
                SOL-=((1LL*A[i]*(A[i]-1))>>1);
            else
                SOL+=((1LL*A[i]*(A[i]-1))>>1);

}

void PRINT ()
{

    out<<SOL;

}

int main ()
{

    READ ();
    SOLVE ();
    PRINT ();

    return 0;

}