Cod sursa(job #2217216)

Utilizator PetyAlexandru Peticaru Pety Data 29 iunie 2018 16:34:15
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 1000000;
int prime[NMAX + 2];
long long ans;

void ciur () {
  for (int i = 2; i <= NMAX; i++)
    if (!prime[i]) {
      for (int j = i; j <= NMAX; j += i) {
        prime[j]++;
        if (j / i % i == 0)
          prime[j] = -NMAX;
      }
    }
}

int n, f[NMAX + 2], x;

int main() {
  ciur();
  fin >> n;
  for (int i = 1; i <= n; i++) {
    fin >> x;
    f[x] = 1;
  }
  for (int i = 2; i <= NMAX; i++) {
    if (prime[i] > 0) {
      int nr = 0;
      for (int j = i; j <= NMAX; j += i)
        nr += f[j];
      if (prime[i] % 2 == 1)
        ans += 1LL * nr * (nr - 1) / 2;
      else
        ans -= 1LL * nr * (nr - 1) / 2;
    }
  }
  fout << 1LL * n * (n - 1) / 2 - ans;
  return 0;
}