Pagini recente » Cod sursa (job #2801998) | Cod sursa (job #172530) | Cod sursa (job #2867133) | Cod sursa (job #2416319) | Cod sursa (job #1700193)
#include <bits/stdc++.h>
using namespace std;
long long countDiv(long long n, int d)
{
long long sum = 0;
long long k = d;
while (n >= k)
{
sum += n / k;
k *= static_cast<long long>(d);
}
return sum;
}
long long bin_search(int factor, long long goodCount)
{
long long l = 0, r = numeric_limits<long long>::max() / 2;
long long found = -1;
while (l <= r)
{
long long m = (l + r) / 2;
if (countDiv(m, factor) >= goodCount)
{
found = m;
r = m - 1;
}
else
l = m + 1;
}
assert(found != -1);
return found;
}
int main()
{
ifstream in("gfact.in");
ofstream out("gfact.out");
int P, Q;
in >> P >> Q;
long long factorial = 1;
for (int d = 2; d * d <= P; ++d)
{
if (P % d == 0)
{
int e = 0;
while (P % d == 0)
{
P /= d;
e++;
}
long long tmp = bin_search(d, static_cast<long long>(e) * Q);
factorial = max(factorial, tmp);
}
}
if (P > 1)
{
long long tmp = bin_search(P, static_cast<long long>(Q));
factorial = max(factorial, tmp);
}
out << factorial << endl;
in.close();
out.close();
return 0;
}