Cod sursa(job #325044)

Utilizator cristikIvan Cristian cristik Data 18 iunie 2009 16:37:32
Problema Factorial Scor 95
Compilator c Status done
Runda Arhiva de probleme Marime 0.82 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;
}
int main()
{
    long long a,b=1000000000,m,k=1;
    int l=1;
    freopen("fact.in","r",stdin);
    freopen("fact.out","w",stdout);
    scanf("%lld",&p);
    if(p==0) {printf("%d",l); return 0;} l=-1;
    for(a=1; a<=b;)
    {
        m=a+(b-a)/2;
        x=nr(m);
        if(x<p) k=m,a=m+1;
        else b=m-1;
    }
   if(nr(k)==p) {printf("%d",l); return 0;}
   if(nr(k+1)==p) printf("%lld",k+1);
   else printf("%d",l);
   return 0;
}