Cod sursa(job #3137471)

Utilizator thinkphpAdrian Statescu thinkphp Data 13 iunie 2023 07:41:38
Problema Factorial Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <bits/stdc++.h>

using namespace std;

template <class T, class UnaryPredicate>
T lowerBound(T left, T right, UnaryPredicate condition) {
    while (left <= right) {
        T middle = left + (right - left) / 2;

        if (condition(middle)) {
            right = middle - 1;
        } else {
            left = middle + 1;
        }
    }

    return left;
}

long long numberOfZeroes(long long val) {
    long long ans = 0;

    while (val > 0) {
        val /= 5;
        ans += val;
    }

    return ans;
}

int main() {
    freopen("fact.in", "rt", stdin);
    freopen("fact.out", "wt", stdout);

    long long N;
    cin >> N;

    long long ans = lowerBound(1LL, 5 * N, [N](long long val) {
       return numberOfZeroes(val) >= N;
    });

    cout << (numberOfZeroes(ans) == N ? ans : -1);

    return 0;
}