Cod sursa(job #2303719)

Utilizator liviu2000Dragomirescu Liviu liviu2000 Data 16 decembrie 2018 19:48:26
Problema Pairs Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <bits/stdc++.h>
#define N 100005

using namespace std ;

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

bitset<10*N> bt ;
bitset<10*N> vz ;
int dv[10*N] , t[N] ;

int main()
{
    int n , i , j , mx=0 , q , sol = 0 ;
    fin >> n ;
    for ( i = 1 ; i <= n ; i++ )
    {
        fin >> t[i] ;
        mx = max(mx,t[i]) ;
        bt[t[i]] = 1 ;
    }
    for ( i = 2 ; i <= mx ; i++ )
    {
        if ( vz[i] == 1 )
            continue ;
        dv[i]++ ;
        for ( j = 2*i ; j <= mx ; j = j+i )
            vz[j] = 1 ;
    }
    for ( i = 2 ; i <= mx ; i++ )
    {
        if ( dv[i] )
        {
            for ( j = 1 ; j*i <= mx ; j++ )
                if ( vz[j] == 0 && i%j != 0 )
                    dv[i*j]++ ;
        }
    }
    for ( i = 2 ; i <= mx ; i++ )
    {
        if ( dv[i] )
        {
            q = 0 ;
            for ( j = 1 ; i*j <= mx ; j++ )
                if ( bt[i*j] == 1 )
                    q++ ;
            q = q*(q-1)/2 ;
            if ( dv[i]%2== 1 )
                sol = sol + q ;
            else
                sol = sol - q ;
        }
    }
    fout << n*(n-1)/2 - sol ;
}