Cod sursa(job #324320)

Utilizator cristikIvan Cristian cristik Data 15 iunie 2009 17:15:25
Problema Factorial Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <stdio.h>
#include <math.h>
unsigned long n,p,x;
unsigned long log5(unsigned long n)
{
    return floor(log10(n)/log10(5));
}
unsigned long pow(unsigned long k)
{
    unsigned long x=5,v=1;
    for(; k; k>>=1,x*=x)
     if(k%2!=0) v*=x;
    return v;
}
unsigned long nr(unsigned long n)
{
    unsigned long s=0;
    for(int i=1; i<=log5(n); i++)
     s+=floor(n/pow(i));
    return s;
}
unsigned long bs()
{
    unsigned long long  a=0,b=100000000000,m;
    while(a<=b)
    {
        m=(a+b)/2;
        x=nr(m);
        if(x<p) a=m+1;
        else
         if(x>p) b=m-1;
        if(x==p) return m;
    }
}
int main()
{
    freopen("fact.in","r",stdin);
    freopen("fact.out","w",stdout);
    scanf("%lu",&p);
    printf("%lu",bs());
    return 0;
}