Cod sursa(job #1417163)

Utilizator felixiPuscasu Felix felixi Data 9 aprilie 2015 19:10:31
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <fstream>
#include <bitset>
#define DIM 1000000
#define LL long long
using namespace std;

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

int N, M, K, ok, minim, F[DIM];
int V[DIM*2], D[DIM], p, u;
int nr, k, B[DIM];
LL i, j, sum;

void SetUp(){
     fin >> N;
     for(i = 1; i <= N; i ++){
          fin >> V[i];
          F[V[i]] = 1;
     }
     return;
}

void CodeExpert(){
     for(i = 2; i < DIM; i ++){
          if(B[i] == 0){
               if(F[i] == 0)
                    nr = 0;
               else
                    nr = 1;
               for(j = i + i; j < DIM; j += i){
                    B[j] ++;
                    if(F[j] == 1)
                         nr ++;
               }
               for(j = i * 1LL * i; j < DIM; j += i * i)
                    D[j] = 1;
               /*
                    FARA PUTERI DE I
               */
               sum += nr * 1LL * (nr-1) / 2;
          }
          else{
               if(D[i] == 0){
                    nr = 0;
                    for(j = i; j < DIM; j += i)
                         if(F[j] == 1)
                              nr ++;
                    if(B[i] % 2 == 1)
                         sum += nr * 1LL * (nr - 1) / 2;
                    else
                         sum -= nr * 1LL * (nr - 1) / 2;
               }
          }
     }
     fout << N * 1LL * (N-1) / 2 - sum;
     return;
}

int main(){
     SetUp();
     CodeExpert();
     return 0;
}