Pagini recente » Cod sursa (job #1125644) | Cod sursa (job #751771) | Cod sursa (job #2715503) | Cod sursa (job #266761) | Cod sursa (job #2197832)
#include <fstream>
#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
using namespace std;
ifstream f("fact.in");
ofstream g("fact.out");
int P;
int N;
#define N_MAX_APROX 381000000
void test(int p) {
// naiv
unsigned long long prod = 1;
unsigned long long i = 1;
unsigned long long P = (unsigned long long)pow(10, p);
while (i < 50) {
cout << prod << "\n";
if (prod % P == 0) {
cout << i << "\n";
break;
}
i += 1;
prod *= i;
}
}
void a(int p) {
// testeaza numere din 5 in 5
if (p == 0)
g << 1 << " \n";
else {
int count = 0;
int x, aux;
for (x = 0; count < p;) {
x += 5;
aux = x;
while (aux % 5 == 0) { aux /= 5; count++; }
}
g << x << "\n";
}
}
unsigned long long puteri5(unsigned long long n) {
unsigned long long x, i, p;
x = n / 5;
for (i = 2, p = 25; p <= n; i++, p*=5)
x += n / p;
return x;
}
unsigned long long st = 5, dr = N_MAX_APROX, m, m_val;
int main() {
f >> P;
if (P == 0) {
g << m / 5 * 5;
return 0;
}
while (true) {
m = (st + dr) / 2;
m_val = puteri5(m);
if (st == dr || m_val == P) {
g << m / 5 * 5;
break;
}
else if (m_val > P) {
dr = m - 1;
}
else if (m_val < P) {
st = m + 1;
}
}
return 0;
}