Pagini recente » Cod sursa (job #1250391) | Cod sursa (job #1177270) | Cod sursa (job #2464444) | Cod sursa (job #1851103) | Cod sursa (job #2418590)
#include <fstream>
using namespace std;
ifstream in("fact.in");
ofstream out("fact.out");
const int N = 1e8;
int p,st=1,dr=N*5+5,mij;
int count_zeros(int mij)
{
int zerouri=0;
while (mij)
{
mij/=5; /// numerele care sunt divizibile cu 5^x sunt divizibile si cu 5^(x-1), ex : mij=100, 100/5=20 nr care se impart cu 5^1 ==> numerele de l la 100 care se vor imparti cu 5^2 sunt printre cele 20 care se impart cu 5^1 (si sunt de 5 ori mai putine, deci 20/5=4), frecventa cu care apare 5 ca divizor e de 5 ori mai mare decat cea cu care apare 25, de 25 de ori mai mare decat cea cu care apare 125 etc...
/// daca dupa inca o impartire cu 5 ele au restul 0 (n%5==0) atunci sunt divizibile si cu 5^2
zerouri+=mij;
}
return zerouri;
}
int main()
{
in>>p;
while (st<dr)
{
mij=(st+dr)/2;
if (count_zeros(mij)<p)
st=mij+1;
else
dr=mij;
}
if (count_zeros(dr)==p)
out<<dr<<"\n";
else
out<<"-1\n";
}