Cod sursa(job #1124633)

Utilizator Athena99Anghel Anca Athena99 Data 26 februarie 2014 13:00:54
Problema Pairs Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <algorithm>
#include <fstream>

using namespace std;

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

typedef long long i64;

const int vmax= 1000000;

i64 prime[vmax+1], e[vmax+1], p[vmax+1];
bool v[vmax+1];

int main(  ) {
    i64 n, maxim= 0; fin>>n;
    i64 sol= (i64)n*(n-1)/2, aux= 0;

    for ( i64 i= 1; i<=n; ++i ) {
        i64 x; fin>>x;
        v[x]= 1;
        maxim= max(maxim, x);
    }

    for ( i64 i= 2; i<=maxim; ++i ) {
        if ( !prime[i] ) {
            for ( i64 j= i; j<=maxim; j+= i ) {
                prime[j]= 1, ++e[j];
                if ( (j/i)%i==0 ) {
                    p[j]= 1;
                }
            }
        }
    }
    for ( i64 i= 2; i<=maxim; ++i ) {
        if ( !p[i] ) {
            i64 x= 0;
            for ( i64 j= i; j<=maxim; j+= i ) {
                if ( v[j]==1 ) {
                    ++x;
                }
            }
            if ( e[i]%2==1 ) {
                aux= (i64)aux+x*(x-1)/2;
            } else {
                aux= (i64)aux-x*(x-1)/2;
            }
        }
    }

    sol-= aux;
    fout<<sol<<"\n";

    return 0;
}