Cod sursa(job #326549)

Utilizator cristikIvan Cristian cristik Data 25 iunie 2009 15:42:28
Problema Factorial Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <stdio.h>
#include <math.h>
long long n,p,x;
long long log5(long long n)
{
    return floor(log10(n)/log10(5));
}
long long pw(long long k)
{
    long long x=5,v=1;
    for(; k; k>>=1,x*=x)
     if(k%2!=0) v*=x;
    return v;
}
long long nr(long long n)
{
    long long s=0,i,l=log5(n);
    for(i=1; i<=l; i++)
     s+=floor(n/pw(i));
    return s;
}
long long met2(int n)
{
    long c=0,d=1,r=1;
    while(r>0)
    {
        d*=5;
        r=n/d;
        c+=r;
    }
    return c;
}
int main()
{
    long long m,last,i=1,j=10000000000;
    freopen("fact.in","r",stdin);
    freopen("fact.out","w",stdout);
    scanf("%lld",&p);
    if(p==0) {printf("1"); return 0;}
    for(i=1; i<=j;)
    {
        m=i+(j-i)/2;
        if(p<=met2(m)) last=m,j=m-1;
        else i=m+1;
    }
    if(met2(last)==p) printf("%d",last);
    else printf("-1");
    return 0;
}