Pagini recente » Cod sursa (job #2098920) | Cod sursa (job #347059) | Cod sursa (job #2048522) | Cod sursa (job #3134497) | Cod sursa (job #859237)
Cod sursa(job #859237)
#include <fstream>
using namespace std;
ifstream f("gfact.in");
ofstream g("gfact.out");
const long long LIM = 1LL * 30000 * 30 * 2000000000;
long long P, sol, fact;
int Q, need;
long long baga(long long val, long long fact)
{
long long aux = fact, ret = 0;
while (aux <= val) {
ret += val / aux;
aux *= fact;
}
return ret;
}
long long bsearch(long long lo, long long hi, long long fact)
{
long long mid;
while (lo <= hi) {
mid = lo + (hi - lo) / 2;
if (baga(mid, fact) < need)
lo = mid + 1;
else
hi = mid - 1;
}
if (baga(mid, fact) < need)
mid++;
return mid;
}
void solve(long long fact, int put)
{
need = put * Q;
long long rez = bsearch(1, LIM, fact);
if (rez > sol)
sol = rez;
}
int main()
{
f >> P >> Q;
long long aux = P;
for (long long fact = 2; fact * fact <= P && aux > 1; fact++) {
int put = 0;
while (aux % fact == 0) {
aux /= fact;
put++;
}
if (put)
solve(fact, put);
}
if (aux > 1)
solve(aux, 1);
g << sol << '\n';
return 0;
}