Cod sursa(job #196396)
#include<fstream>
using namespace std;
int fi(long long x){
int sum=0, pow, _5pow, ant,cur;//ink o var
pow=0; _5pow=1;
while(_5pow<=x){
++pow;
_5pow*=5;
}
--pow;
_5pow/=5;
ant=0;
while(pow){
cur=x/_5pow;
cur-=ant;
ant+=cur;
sum+=cur*pow;
pow--;
_5pow/=5;
}
return sum;
}
long long bs(int p, long long MAX){
long long st, dr, m, valf;
st=MAX>>1;dr=MAX;
if(fi(dr)==p) return dr;
while(st<dr){
m=(st+dr)/2;
valf=fi(m);
if(p==valf) return m;
if(valf>p) dr=m-1;
else st=m+1;
}
return -1;
}
int main(){
int p;
ifstream f("fact.in");
f>>p;
f.close();
ofstream g("fact.out");
long long MAX;
for( MAX=1 ;fi(MAX)<p;MAX<<=1);
long long r=bs(p, MAX);
if(r!=-1){
while(r&&fi(r)==p) r--;
++r;
}
g<<r<<'\n';
g.close();
return 0;
}