Cod sursa(job #2642193)

Utilizator popashtefan10Popa Stefan popashtefan10 Data 13 august 2020 22:49:52
Problema Indep Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 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];
bool ciur[VMAX + 5];

void precalc() {
  ciur[0] = ciur[1] = true;
  for(int i = 1; i <= VMAX; i++)
    verif[i] = 1;
  for(int i = 2; i <= VMAX; i++)
    if(!ciur[i])
      for(int j = i; j <= VMAX; j += i) {
        if(j > i)
          ciur[j] = true;
        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);
  for(int i = 1; i <= n; i++) {
    scanf("%d", &x);
    frecv[x]++;
    maxim = max(maxim, x);
  }

  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)
      if(nr_div[i] % 2 == 0)
        sol += (1 << nr_multipli[i]) - 1;
      else
        sol -= (1 << nr_multipli[i]) - 1;

  printf("%d", sol);

  return 0;
}