Cod sursa(job #2642228)

Utilizator popashtefan10Popa Stefan popashtefan10 Data 14 august 2020 09:21:40
Problema Indep Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <iostream>
#include <cstdio>
#include <vector>

using namespace std;

const int MAXCF = 350;
const int VMAX = 1000;
const int NMAX = 500;
const int BASE = 10000;

int frecv[VMAX + 5], nr_multipli[VMAX + 5];
int verif[VMAX + 5], nr_div[VMAX + 5];
int p2[NMAX + 5];

void precalc() {
  for(int i = 1; i <= VMAX; i++)
    verif[i] = 1;
  for(int i = 2; i <= VMAX; i++)
    if(verif[i] == 1)
      for(int j = i; j <= VMAX; j += i) {
        verif[j] *= i;
        nr_div[j]++;
      }
}

int main() {
  freopen("indep.in", "r", stdin);
  freopen("indep.out", "w", stdout);
  int n, x, maxim = 0;

  precalc();
  scanf("%d", &n);
  p2[0] = 1;
  for(int i = 1; i <= n; i++) {
    p2[i] = p2[i - 1] + p2[i - 1];
    scanf("%d", &x);
    frecv[x]++;
    maxim = max(maxim, x);
  }

  for(int i = 1; i <= n; i++)
    p2[i] -= 1;

  for(int i = 1; i <= maxim; i++)
    for(int j = i; j <= maxim; j += i)
      nr_multipli[i] += frecv[j];

  int sol = 0;
  for(int i = 1; i <= maxim; i++)
    if(verif[i] == i && nr_multipli[i] != 0)
      if(nr_div[i] % 2 == 0)
        sol += p2[nr_multipli[i]];
      else
        sol -= p2[nr_multipli[i]];

  printf("%d", sol);

  return 0;
}