Pagini recente » Cod sursa (job #1018054) | Cod sursa (job #599186) | Cod sursa (job #2511723) | Cod sursa (job #3278303) | Cod sursa (job #2781405)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("fact.in");
ofstream fout("fact.out");
/*
vrem o functie care ia ca parametru un numar naturla N, si intoarce
cate 0-uri are N!
Complexitatea este O(N log N) -> ceva in genu, nu e foarte precisa complexitatea pe care am scris o aici
Noi am cautat liniar solutia -> adica am luat la rand toate solutiile posibile si am vazut care se potriveste.
*/
int cate_zerouri(unsigned int N)
{
int s=0, nr, i = 5;
while(i <= N)
{
s = s + N / i;
i = i * 5;
}
return s;
}
int main()
{
int P, zero, st, dr, mij;
fin >> P;
st = 1;
dr = INT_MAX - 1;
while(st <= dr)
{
mij = (st + dr) / 2;
zero = cate_zerouri(mij);
if(zero >= P)
dr = mij - 1;
else
st = mij + 1;
}
mij = (st + dr) / 2;
zero = cate_zerouri(mij);
int ok = 0;
for (int i = mij + 1; i<= mij + 5; i++)
{
if(cate_zerouri(i) == P)
{
fout << i;
ok = 1;
break;
}
}
if (ok == 0)
fout << -1;
return 0;
}