Pagini recente » Cod sursa (job #2036138) | Cod sursa (job #1057085) | Cod sursa (job #3173792) | Cod sursa (job #2596563) | Cod sursa (job #1430087)
#include <stdio.h>
#define HIGH 25000000
int n0;
inline int log2(int x) {
int ans;
asm ("bsr %1, %0" : "=r" (ans) : "r" (x));
return ans;
}
inline int countFive(int x) {
int div = 5;
int ans = 0;
while (x >= div && ans <= n0) {
ans = ans + (x / div);
div = div + (div << 2);
}
return ans;
}
int main(void) {
FILE *f = fopen("factorial.in", "r");
int lo, hi;
fscanf(f, "%d", &n0);
fclose(f);
if (n0) {
lo = -1;
hi = HIGH + 1;
while (hi - lo > 1) {
int mid = lo + ((hi - lo) >> 1);
if (countFive(mid) < n0) {
lo = mid;
} else {
hi = mid;
}
}
f = fopen("factorial.out", "w");
fprintf(f, "%d\n", countFive(hi) == n0 ? hi : -1);
} else {
f = fopen("factorial.out", "w");
fputs("1\n", f);
fclose(f);
}
fclose(f);
return 0;
}