Pagini recente » Cod sursa (job #1909124) | Monitorul de evaluare | Cod sursa (job #129104) | Cod sursa (job #344744) | Cod sursa (job #1626632)
#include <fstream>
using namespace std;
int p, st, dr, mij, z, val;
int exp(int p, int n);
int main() {
fstream fin("fact.in", ios::in), fout("fact.out", ios::out);
fin >> p;
if(!p) {
fout << 1 << endl;
return 0;
}
st = 1;
val = -1;
dr = 2000000000;
while(st <= dr) {
mij = (st + dr) / 2;
z = exp(5, mij);
if(z == p) {
val = mij;
break;
} else if(z < p) {
st = mij + 1;
} else
dr = mij - 1;
}
if(val != -1) {
while(val % 5)
val--;
}
fout << val << endl;
return 0;
}
//n factorial = p^e * a, p prim e = [n/p]+[n/p&2]+....
int exp(int p, int n) {
int e = 0, x;
x = p;
while(n >= x) {
e = e + n/x;
x *= p;
}
return e;
}