Cod sursa(job #1159530)

Utilizator tudorv96Tudor Varan tudorv96 Data 29 martie 2014 18:08:04
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#include <bitset>
using namespace std;

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

const int N = 1e6 + 5;

typedef unsigned long long ull;

ull sol;
bitset <N> nok, viz, phi;
int f[N], n, MAX;


int main() {
    fin >> n;
    for (int x, i = 0; i < n; ++i) {
        fin >> x;
        viz[x] = 1;
        MAX = max(MAX, x);
    }
    for (int i = 2; i <= MAX; ++i)
        if (!phi[i])
            for (int j = 1; j <= MAX / i; ++j) {
                f[i * j]++;
                phi[i * j] = 1;
                if (j % i == 0)
                    nok[i*j] = 1;
            }
    for (int i = 2; i <= MAX; ++i)
        if (!nok[i]) {
            ull nr = 0;
            for (int j = 1; j <= MAX / i; ++j)
                if (viz[i * j])
                    nr++;
            if (f[i] % 2)
                sol += nr * (nr - 1) / 2;
            else
                sol -= nr * (nr - 1) / 2;
        }
    fout << 1LL * n * (n - 1) / 2 - sol;
}