Cod sursa(job #2314808)

Utilizator bleo16783FMI Bleotiu Cristian bleo16783 Data 9 ianuarie 2019 02:25:34
Problema Pairs Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
#define N 1001000
int v[N],it,i,n,x,MAX,cnt,d[N];
long long ans,curr;
int numar_prime (int x){ ///numarul de numere prime din descompunere
                        ///daca fiecare apare doar odata si 0 altfel
    int cnt = 0,dim = x;
    for (int d = 2; d < dim; ++d){
        if (x % d == 0){
            ++cnt;
            x /= d;
        }
        if (x % d == 0)
            return 0;
    }
    if(x > 1)
        return cnt + 1;
    return cnt;
}
int main()
{
    ifstream fin ("pairs.in");
    fin >> n;
    ans = 1LL * n * (n - 1) / 2;
    MAX = 0;
    for (i = 0; i < n; ++i){
        fin >> x;
        v[x] = 1;
        MAX = max(MAX,x);
    }
    for (i = 0; i < MAX; ++i)
        d[i] = 0;
    for (it = 2; it < MAX; ++it){
        cnt = numar_prime(it);
        if (cnt){
            for (i = 0; i < MAX / it + 1; ++i)
                d[it] += v[i * it];
            curr = 1LL * d[it] * (d[it] - 1) / 2;
            if (cnt & 1)
                ans -= curr;
            else
                ans += curr;
        }
    }
    ofstream fout ("pairs.out");
    fout << ans;
    return 0;
}