Cod sursa(job #1626632)

Utilizator StefanStefStefan Stef StefanStef Data 3 martie 2016 10:47:11
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <fstream>
using namespace std;

int p, st, dr, mij, z, val;
int exp(int p, int n);

int main() {
  fstream fin("fact.in", ios::in), fout("fact.out", ios::out);
  fin >> p;
  if(!p) {
    fout << 1 << endl;
    return 0;
  }
  st = 1;
  val = -1;
  dr = 2000000000;
  while(st <= dr) {
    mij = (st + dr) / 2;
    z = exp(5, mij);
    if(z == p) {
      val = mij;
      break;
    } else if(z < p) {
      st = mij + 1;
    } else
      dr = mij - 1;
  }
  if(val != -1) {
    while(val % 5)
      val--;
  }
  fout << val << endl;
  return 0;
}

//n factorial = p^e * a, p prim   e = [n/p]+[n/p&2]+....
int exp(int p, int n) {
  int e = 0, x;
  x = p;
  while(n >= x) {
    e = e + n/x;
    x *= p;
  }
  return e;
}