Cod sursa(job #324990)

Utilizator cristikIvan Cristian cristik Data 18 iunie 2009 14:09:31
Problema Factorial Scor 5
Compilator c Status done
Runda Arhiva de probleme Marime 0.72 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 pw(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,i,l=log5(n);
    for(i=1; i<=l; i++)
     s+=floor(n/pw(i));
    return s;
}
int main()
{
    unsigned long long a=0,b=10000000000,m,i;
    freopen("fact.in","r",stdin);
    freopen("fact.out","w",stdout);
    scanf("%lu",&p);
    while(a<=b)
    {
        m=(a+b)/2;
        x=nr(m);
        if(x<p) a=m+1;
        else b=m-1;
        if(x==p) {printf("%d",m); return 0;}
    }
}