Cod sursa(job #1805855)

Utilizator TincaMateiTinca Matei TincaMatei Data 14 noiembrie 2016 15:31:32
Problema Pascal Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <cstdio>

struct codeFactory {
  int e2, e3, e5;
} fi, fj, fij, rez;

int main() {
  int r, d, nr;
  FILE *fin = fopen("pascal.in", "r");
  fscanf(fin, "%d%d", &r, &d);
  fclose(fin);

  for(int i = 1; i <= r; ++i) {
    int c = i;
    while(c % 2 == 0) {
      fi.e2++;
      c = c / 2;
    }
    while(c % 3 == 0) {
      fi.e3++;
      c = c / 3;
    }
    while(c % 5 == 0) {
      fi.e5++;
      c = c / 5;
    }
  }

  fij = fi;
  nr = 0;
  for(int j = 0; j <= r; ++j) {
    rez.e2 = fi.e2 - fj.e2 - fij.e2;
    rez.e3 = fi.e3 - fj.e3 - fij.e3;
    rez.e5 = fi.e5 - fj.e5 - fij.e5;
    if(d == 2 && rez.e2 > 0)
      ++nr;
    else if(d == 3 && rez.e3 > 0)
      ++nr;
    else if(d == 4 && rez.e2 > 1)
      ++nr;
    else if(d == 5 && rez.e5 > 0)
      ++nr;
    else if(d == 6 && rez.e2 > 0 && rez.e3 > 0)
      ++nr;

    int c = j + 1;
    while(c % 2 == 0) {
      fj.e2++;
      c = c / 2;
    }
    while(c % 3 == 0) {
      fj.e3++;
      c = c / 3;
    }
    while(c % 5 == 0) {
      fj.e5++;
      c = c / 5;
    }

    c = r - j;
    if(c == 0)
      c = 1;
    while(c % 2 == 0) {
      fij.e2--;
      c = c / 2;
    }
    while(c % 3 == 0) {
      fij.e3--;
      c = c / 3;
    }
    while(c % 5 == 0) {
      fij.e5--;
      c = c / 5;
    }
  }

  FILE *fout = fopen("pascal.out", "w");
  fprintf(fout, "%d", nr);
  fclose(fout);
  return 0;
}