Cod sursa(job #2314659)

Utilizator BlackLordFMI Alex Oprea BlackLord Data 8 ianuarie 2019 22:00:32
Problema Pairs Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>

#define max(a, b) (a > b ? a : b)

using namespace std;

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

int n, i, j, x, maxim, a[1000010], b[1000010], l;
long long v[100010][3], s;

int main(){
    fin >> n;
    for (i = 1; i <= n; ++i) {
        fin >> x;
        a[x] = 1;
        maxim = max(maxim, x);
    }
    v[0][0] = 1;
    for (i = 1; i <= n; ++i) {
        v[i][0] = 1;
        v[i][1] = v[i - 1][0] + v[i - 1][1];
        v[i][2] = v[i - 1][1] + v[i - 1][2];
    }
    for (i = 2; i <= maxim; ++i) {
        if (b[i] == 0) {
            for (j = i; j <= maxim; j += i)
                b[j]++;
        }
    }
    for (i = 2; i * i <= maxim; ++i) {
        for (j = i * i; j <= maxim; j += i * i) {
            b[j] = 0;
        }
    }
    for (i = 2; i <= maxim; ++i) {
        if (b[i] > 0) {
            l = 0;
            for (j = i; j <= maxim; j += i)
                l += a[j];
            if (b[i] % 2 == 1) {
                s = s + v[l][2];
            } else {
                s = s - v[l][2];
            }
        }
    }
    s = (1LL *n * (n - 1)) / 2 - s;
    fout << s;
    return 0;
}