Cod sursa(job #2312509)

Utilizator dragos99Homner Dragos dragos99 Data 4 ianuarie 2019 22:56:20
Problema Pairs Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include<fstream>
#include<vector>
#include<math.h>
#include<iostream>
using namespace std;
    ifstream f("pairs.in");
    ofstream g("pairs.out");

vector<long long> nrprime;
long long n;
long x[1000001];
char exista[1000001], ciur_marcat[1000001];

int main()
{
    long i, j, maxim, a;
    f>>n>>a;
    maxim = a;
    exista[a] = 1;
    for(i = 1 ; i < n ; i++){
        f>>a;
        exista[a] = 1;
        if(a > maxim)
            maxim = a;
    }

    long long sol = ( n * (n - 1) ) / 2;

    for(i = 2 ; i <= maxim ; i++){
        if(x[i] == 0){
            for(j = i ; j <= maxim ; j += i)
                x[j] ++;
        }
    }

    for(i = 2 ; i * i <= maxim ; i++){
        for(j = i * i ; j <= maxim ; j += i * i)
            x[j] = -1;
    }

    long long nrNeprime = 0;
    for(i = 2 ; i <= maxim ; i++){
        if(x[i] > 0){
            nrNeprime = 0;
            for(j = i ; j <= maxim ; j += i)
                if(exista[j])
                    nrNeprime ++;
            if(x[i] % 2 == 0)
                sol += (nrNeprime * (nrNeprime - 1)) / 2;
            else
                sol -= (nrNeprime * (nrNeprime - 1)) / 2;
        }
    }

    g<<sol;

    return 0;
}