Cod sursa(job #1040807)

Utilizator AnonymouslegionAnonymous Anonymouslegion Data 24 noiembrie 2013 22:34:21
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <fstream>
#include <vector>

using namespace std;

int rval;
inline int many(int x, int y){
  rval = 0;
  while(x % y == 0){
    ++rval;
    x /= y;
  }
  return rval;
}

int main(){
  ifstream in("pascal.in");
  ofstream out("pascal.out");

  int r, d, lim;
  in >> r >> d;
  bool t2, t3, t5;
  if(d % 2 == 0)
    t2 = true;
  if(d % 3 == 0)
    t3 = true;
  if(d % 5 == 0)
    t5 = true;
  lim = r / 2;
  if(r % 2 == 1)
    ++lim;

  int num[6] = {0}, ans = 0;

  for(int i = 1; i < lim; ++i){
    if(t2)
      num[2] += many(r - i + 1, 2) - many(i, 2);
    if(t3)
      num[3] += many(r - i + 1, 3) - many(i, 3);
    if(t5)
      num[5] += many(r - i + 1, 5) - many(i, 5);

    if(d == 2){
      if(num[2])
        ++ans;
    }
    else if(d == 3){
      if(num[3])
        ++ans;
    }
    else if(d == 4){
      if(num[2] > 1)
        ++ans;
    }
    else if(d == 5){
      if(num[5])
        ++ans;
    }
    else{
      if(num[2] && num[3])
        ++ans;
    }
  }

  ans *= 2;

  if(r % 2 == 0){
  if(t2)
      num[2] += many(r - lim + 1, 2) - many(lim, 2);
    if(t3)
      num[3] += many(r - lim + 1, 3) - many(lim, 3);
    if(t5)
      num[5] += many(r - lim + 1, 5) - many(lim, 5);

    if(d == 2){
      if(num[2])
        ++ans;
    }
    else if(d == 3){
      if(num[3])
        ++ans;
    }
    else if(d == 4){
      if(num[2] > 1)
        ++ans;
    }
    else if(d == 5){
      if(num[5])
        ++ans;
    }
    else{
      if(num[2] && num[3])
        ++ans;
    }
  }

  out << ans;

  return 0;
}