Pagini recente » Cod sursa (job #1365433) | Cod sursa (job #2342874) | Cod sursa (job #1875655) | Cod sursa (job #2569286) | Cod sursa (job #1738638)
#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;
}