Cod sursa(job #918014)

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

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

using namespace std;

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

const int N = 1000001 ;

typedef unsigned long long I64;

bool X[N];
I64 SOL,n,A[N],V[N],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=n*(n-1);

    SOL>>=1;

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

}

void PRINT ()
{

    out<<SOL;

}

int main ()
{

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

    return 0;

}