Cod sursa(job #951104)

Utilizator matei_cChristescu Matei matei_c Data 19 mai 2013 12:11:23
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include<fstream>
#include<bitset>
#include<algorithm>
using namespace std;

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

#define maxn 1000001

bitset<maxn> ok ;

long long v[maxn] ;
long long N, lim ;

long long sol ;

int main()
{
    fin >> N ;

    sol = N * ( N - 1 ) / 2 ;

    while( N-- )
    {
        long long x ;
        fin >> x ;
        ok[x] = 1 ;
        lim = max( lim, x ) ;
    }

    for(long long i = 2; i <= lim; ++i )
        if( v[i] == 0 )
            for(long long j = i; j <= lim; j += i )
                ++v[j] ;

    for(long long i = 2; i * i <= lim; ++i )
        for(long long j = i * i; j <= lim; j += i * i )
            v[j] = 0 ;

    for(long long i = 2; i <= lim; ++i )
    {
        if( v[i] )
        {
            long long nr = 0 ;
            long long semn ;

            for(long long j = i; j <= lim; j += i )
                if( ok[j] )
                    ++nr ;

            if( v[i] % 2 )
                semn = -1 ;
            else
                semn = 1 ;

            sol += semn * nr * ( nr - 1 ) / 2 ;
        }
    }

    fout << sol ;

    return 0 ;

}