Pagini recente » Cod sursa (job #1058210) | Cod sursa (job #1973695) | Cod sursa (job #2170845) | Cod sursa (job #2019616) | Cod sursa (job #1837961)
/*
kpim1636
Kovacs Patrik
group: 512
http://www.infoarena.ro/problema/fact
*/
#include <fstream>
//#define CONSOLE
#ifdef CONSOLE
#include <iostream>
#define f std::cin
#define g std::cout
#endif
typedef unsigned long long ulong;
ulong exponent (ulong n, int k) {
ulong t = n / k;
ulong a = k;
ulong sum = 0;
while (t) {
sum += t;
a *= k;
t = n / a;
}
return sum;
}
ulong binary_search (ulong left, ulong right, int p) {
if (left > right)
return -1;
if (left == right) {
if (exponent(left, 5) == p)
return left;
else
return -1;
}
ulong mid = (left + right) / 2;
ulong k = exponent(mid, 5);
if (k > p)
return binary_search(left, mid, p);
else if (k < p)
return binary_search(mid+1, right, p);
else {
ulong t = binary_search(left, mid, p);
if (t != -1)
return t;
else
return mid;
}
}
int main () {
#ifndef CONSOLE
std::ifstream f ("fact.in");
std::ofstream g ("fact.out");
#endif
int p;
f >> p;
if (!p) {
g << 1;
return 0;
}
g << binary_search(0, 10000000000, p);
}