Cod sursa(job #1738638)

Utilizator bleo16783FMI Bleotiu Cristian bleo16783 Data 7 august 2016 13:04:25
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <iostream>
#include<fstream>
using namespace std;
long long p,x,y,z,i,nr,k,p5[20];
int pmax(long long d)
{
    int j;
    for(j=1;j<20;++j)if(p5[j]>d)return j-1;
    return j;
}
long long formula(long long h)
{
    int a=pmax(h);
    long long q,m,n;m=h/p5[a];n=a*m;
    --a;
    for(;a>0;--a)
    {
        q=h/p5[a];n+=a*(q-m);m=q;
    }
    return n;
}
int main()
{

    ifstream f("fact.in");
    f>>p;
    f.close();
    if(p)
    {
        if(p<10001)
        {
            x=5;nr=1;
            while(nr<p)
            {
                x+=5;k=1;
                i=x/5;while(i%5<1){++k;i/=5;}
                nr+=k;
            }
        }
        else
        {
            p5[0]=1;for(i=1;i<20;++i)p5[i]=p5[i-1]*5;
            x=427000000;y=0;z=(x+y)/2;nr=formula(z);
            //cout<<formula(1953125);
            while(x>y)
            {
                if(nr==p){x=z;y=z;}
                else
                {
                    if(nr>p)
                    {
                        x=z;
                        z=(x+y)/2;nr=formula(z);
                    }
                    else
                    {
                        y=z+1;
                        z=(x+y)/2;nr=formula(z);
                    }
                }
            }
            x-=x%5;nr=formula(x);
        }
    }
    else
        x=1;
    ofstream g("fact.out");
    if(nr==p)g<<x;
    else g<<"-1";
    g.close();
    return 0;
}