Cod sursa(job #2792129)

Utilizator Teodor94Teodor Plop Teodor94 Data 31 octombrie 2021 23:31:24
Problema Dtcsu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <stdio.h>
#include <ctype.h>

#define int64 long long
#define NO_NUMBERS 276997

FILE *fin, *fout;
int64 readInt64() {
  char ch;
  int64 res;

  res = 0;
  while (!isdigit(ch = fgetc(fin)));
  do
    res = res * 10 + ch - '0';
  while (isdigit(ch = fgetc(fin)));

  return res;
}

int64 bases[5] = {2, 3, 5, 7, 11};
int64 noExponents[5] = {6, 6, 5, 5, 5};
int64 exponents[5][6] = {
  {1, 2, 4, 8, 16, 32}, //  2
  {1, 2, 4, 8, 16, 32}, //  3
  {1, 2, 4, 8, 16},     //  5
  {1, 2, 4, 8, 16},     //  7
  {1, 2, 4, 8, 16}      // 11
};
int64 powers[5][6];

void pregenPowers() {
  int i, j, k;

  for (i = 0; i < 5; ++i)
    for (j = 0; j < noExponents[i]; ++j) {
      powers[i][j] = 1;
      for (k = 0; k < exponents[i][j]; ++k)
        powers[i][j] *= bases[i];
    }
}

int64 removePowers(int64 x) {
  int i, j;

  for (i = 0; i < 5; ++i)
    for (j = noExponents[i] - 1; j >= 0; --j)
      if (x % powers[i][j] == 0)
        x /= powers[i][j];

  return x;
}

int main() {
  fin = fopen("grader_test1.in", "r");
  fout = fopen("dtcsu.out", "w");

  int i, q, counter;
  int64 x;

  for (i = 0; i < NO_NUMBERS; ++i)
    x = readInt64();

  pregenPowers();

  counter = 0;
  q = readInt64();
  while (q--) {
    x = readInt64();
    x = removePowers(x);

    counter += x == 1;
  }

  fprintf(fout, "%d\n", counter);

  fclose(fin);
  fclose(fout);
  return 0;
}