Cod sursa(job #1868626)

Utilizator GeorgianBaditaBadita Marin-Georgian GeorgianBadita Data 5 februarie 2017 01:44:44
Problema Factorial Scor 55
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <cstdio>
#define MIN(A,B) A <= B ? A : B
#define INF 100000000
using namespace std;

FILE *f = freopen("fact.in", "r", stdin);
FILE *g = freopen("fact.out", "w", stdout);
int p;
int ret(int p) {
    if(p == 0) return 1;
    int nr2 = 0, nr5 = 0;
    int n = 1, k = 1;
    bool ok = false;
    while(!ok) {
        n = k;
        while(n % 2 == 0) {
            nr2 ++; n/= 2;

        }
        while(n % 5 == 0) {
            nr5 ++; n/= 5;
        }
        if(MIN(nr2, nr5) == p)
            return k;
        k ++;
    }
}
int verif(int n) {
    int sum = 0, p = 5;
    while(p <= n) {
        sum += n / p;
        p *= 5;
    }
    return sum;
}
int caut_binar() {
    int ls = 0, ld = INF;
    while(ls <= ld) {
        int mij = (ls + ld) / 2;
        int val = verif(mij);
        if(val == p)
            return mij - mij%5;
        else if(val < p)
            ls = mij + 1;
        else if(val > p)
            ld = mij - 1;
    }
    return -1;
}
int main() {
    scanf("%d", &p);
    printf("%d ", caut_binar());
    //printf("%d", verif(45, 9));
    return 0;
}