Cod sursa(job #445261)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 23 aprilie 2010 12:09:34
Problema Factorial Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <cstdio>

#define file_in "fact.in"
#define file_out "fact.out"

long long n;

void citire()
{
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%lld", &n);
}

inline long long min(long long a, long long b) { return a<b?a:b; }

long long desc(long long x)
{
	long long nr5,nr2;
	nr5=nr2=0;
	
	long long i;
	
	i=2;
	while(i<=n)
	{
		nr2+=(x/i);
		i*=2;
	}
	i=5;
	while(i<=4000000000)
	{
		nr5+=(x/i);
		i*=5;
	}
	
	
	
	return min(nr2,nr5);
}


void solve()
{
	long long ls,ld,mij,sol=1;
	long long x;
	
	ls=1;
	ld=999999999;
	
	while(ls<=ld)
	{
		mij=(ls+ld)>>1;
		x=desc(mij);
	
		if (x>=n)
		{
			ld=mij-1;
			sol=mij;
		}
		else
		{
			ls=mij+1;
		}
	}
	
	if (desc(sol)!=n)
		printf("-1\n");
	else
		printf("%lld\n", sol);
}

int main()
{
	citire();
	solve();
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
	
}