Pagini recente » Cod sursa (job #10914) | Cod sursa (job #1694899) | Cod sursa (job #710847) | Cod sursa (job #2277483) | Cod sursa (job #1351730)
#include <iostream>
#include <fstream>
#include <cstdio>
using namespace std;
ofstream g("fact.out");
long long p,n,nmin,nmax,i,ii,c,s,iii;
int main()
{
freopen("fact.in","r",stdin);
scanf("%lld",&p);
if (p==0)
{
g<<1;
return 0;
}
if(p==1)
{
g<<5;
return 0;
}
/*n1=(-1+sqrt(double(1+8*p)));
if(p==n*(n+1)/2)
{
g<<-1;
return 0;
}*/
n=5;
c=1;
while(c<p)
{
n=n*5;
c=c*5+1;
}
nmax=n/5;
nmin=n/5;
c=(c-1)/5;
while(c<p)
{
nmax*=2;
c*=2;
}
nmin=nmax/2;
c=0;
while(nmin<=nmax)
{
c=0;
i=ii=(nmin+nmax)/2;
while(ii)
{
c+=ii/5;
ii/=5;
}
if(c>p)
{
nmax=(nmin+nmax)/2-1;
}
if(c<p)
{
nmin=(nmin+nmax)/2+1;
}
if(c==p)
{
for(ii=i;c==p;ii--)
{
c=0;
iii=ii;
while(iii)
{
c=c+iii/5;
iii/=5;
}
}
g<<ii+2;
return 0;
}
}
g<<-1;
return 0;
}