Cod sursa(job #1807260)

Utilizator tac1234Tran Bach Nguyen tac1234 Data 16 noiembrie 2016 11:41:54
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <cstdio>
using namespace std;
const long long INF=9999999999999999;
inline long long pow5(long long n)
{
    long long nr=5,sum=0;
    while(n>=nr)
    {
        sum+=n/nr;
        nr*=5LL;
    }
    return sum;
}
inline long long binarysearch(long long p)
{
    long long st=0,dr=INF,med;
    while(st<dr)
    {
        med=(st+dr)>>1;
        if (pow5(med)==p)
            return med;
        else
            if (pow5(med)<p)
                st=med+1;
            else
                dr=med-1;
    }
    return st;
}
int main()
{
    freopen("fact.in","r",stdin);
    freopen("fact.out","w",stdout);
    long long p,x;
    scanf("%lld",&p);
    x=binarysearch(p);
    if (p==0)
    {
        printf("1\n");
        return 0;
    }
    if (pow5(x)!=p)
        printf("-1\n");
    else
    {
        while(x%5)
            --x;
        printf("%lld\n",x);
    }
}