Cod sursa(job #3169924)

Utilizator RobertAcAcatrinei Robert-Marian RobertAc Data 16 noiembrie 2023 12:27:37
Problema Factorial Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <bits/stdc++.h>
#ifdef LOCAL
#define in cin
#define out cout
#endif
#define int int64_t
using namespace std;

#ifndef LOCAL
ifstream in("fact.in");
ofstream out("fact.out");
#endif

bool countt(int maxx,vector<pair<int,int>> bases,int q)
{
    for(auto i:bases)
    {
        int cnt=0;
        int base1=i.first;
        while(base1<=maxx)
        {
            cnt+=maxx/base1;
            base1*=i.first;
        }
        if(cnt<i.second*q)return 0;
    }
    return 1;
}

bool verif(int n,int zeros)
{
    int cnt2=0;
    int base2=2;
    while(base2<=n)
    {
        cnt2+=n/base2;
        base2*=2;
    }
    int cnt5=0;
    int base5=5;
    while(base5<=n)
    {
        cnt5+=n/base5;
        base5*=5;
    }
    return min(cnt2,cnt5)==zeros;
}

signed main()
{
    int p=10,q;in>>q;
    int st = 1, dr = __LONG_LONG_MAX__/2;
    vector<pair<int,int>> bases;
    bases.push_back({2,1});
    bases.push_back({5,1});
    while (st<dr)
    {
        int mid=(st+dr)/2;
        if(countt(mid,bases,q))
        {
            dr=mid;
        }
        else
        {
            st=mid+1;
        }
    }
    if(verif(st,q))out<<st;
    else out<<-1;
}