Cod sursa(job #918008)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 18 martie 2013 15:55:44
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb

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

using namespace std;

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

const int N = 1000001 ;

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

void READ ()
{

    in>>n;

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

}

void SOLVE ()
{

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

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

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

    SOL>>=1;

    for( int 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;

}