Cod sursa(job #1796183)

Utilizator mdiannnaMarusic Diana mdiannna Data 3 noiembrie 2016 10:35:40
Problema Factorial Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <iostream>
#include <cmath>
#include <stdio.h>


#define ll long long
using namespace std;


ll A[30];


ll zero(ll x){
    ll i = 1;
    ll rez = 0;
   // cout << " x=" << x << "  A[i]=" << A[i] << endl;
    while(x >= A[i]){
     //   cout << "x/A[i] = " << x << "/" << A[i] << endl;
        rez += x / A[i];
        i++;
    }
    return rez;
}


void generarePuteri5(){
  for(int i=1; i<29; i++)
    {
        A[i] = pow(5, i);
//        cout << A[i] << " ";
    }
}


ll cautareBinara(ll x, ll st, ll dr){
    ll m = (st+dr)/2;
   // cout << "m=" << m << "  zero(" << m << ")=" << zero(m) << " x=" << x << endl;

    if(zero(m) == x)
        return m;

    if(st>dr){
        return 0;
    }

    if(x < zero(m))
        return cautareBinara(x, st, m-1);
     else
        return cautareBinara(x, m+1, dr);
}


ll finalRez(ll N, ll a, ll b){
    for(ll i =1; i<b; i++){
        if(zero(i) == N)
            return i;
    }
}

int main(){

    ll N;
    freopen("fact.in", "r", stdin);
    freopen("fact.out", "w", stdout);


    cin >> N;

  generarePuteri5();
    //cout << zero(50);
    ll a = cautareBinara(N-1, 1, 1LL<<60);
    ll b = cautareBinara(N, 1, 1LL<<60);

    cout << finalRez(N, a, b);
    return 0;
}