Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Diferente pentru utilizator/stargold2 intre reviziile 178 si 177 | Cod sursa (job #1961043) | Cod sursa (job #2016015)
#include <stdio.h>
#define NMAX 1000000000000000000
long long legendre (long long n, long long p ) {
long long cp, rez ;
cp = p ;
rez = 0 ;
while (cp <= n ) {
rez += (n / cp ) ;
cp = cp * p ;
}
return rez ;
}
int main() {
FILE *fin, *fout ;
fin = fopen ("fact.in", "r" ) ;
fout = fopen ("fact.out", "w" ) ;
long long p, res, st, dr, pivot, last ;
long long n ;
fscanf (fin, "%lld", &p ) ;
st = 1 ;
dr = NMAX ;
while (st <= dr ) {
pivot = ( st + dr ) / 2 ;
res = legendre (pivot, 5 ) ;
if (res < p ) {
st = pivot + 1;
}
else {
dr = pivot - 1 ;
}
if (res == p && pivot < last )
last = pivot ;
}
if (last > 0 ) {
fprintf (fout, "%lld", last ) ;
}
else
fprintf (fout, "%d", -1 ) ;
return 0;
}