Pagini recente » Cod sursa (job #2263197) | Cod sursa (job #1296357) | Cod sursa (job #1766547) | Cod sursa (job #1042995) | Cod sursa (job #1452476)
#include <iostream>
#include <fstream>
#include <cmath>
#include <numeric>
#define MIN(a,b) ((a)<(b))?(a):(b)
const char IN[] = "fact.in", OUT[] = "fact.out";
using namespace std;
int P;
inline void read_data() {
fscanf(fopen(IN, "r"), "%d", &P);
}
int perm_count_zeros(long long x) {
int total = 0;
long long cnt = -1;
for (int b5 = 5; cnt != 0; b5 *= 5) {
cnt = floor(x/b5);
total += cnt;
}
return total;
}
inline int find_fact(int P) {
if (P == 0) return 1;
long long low = 1, high = 999999999LL;
while (low <= high) {
long long m = low + (high - low) / 2;
long long count = perm_count_zeros(m);
if (count == P) {
while (m % 5 != 0) --m;
return m;
}
if (count < P) low = m + 1;
else high = m - 1;
}
}
int main() {
read_data();
int r = find_fact(P);
fprintf(fopen(OUT, "w"), "%d\n", (r==0)?-1:r);
return 0;
}