Pagini recente » Cod sursa (job #2133558) | Cod sursa (job #2261007) | Cod sursa (job #3195814) | Cod sursa (job #3195912) | Cod sursa (job #1593223)
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int P, Q;
long long MAX;
long long bs(int, int);
long long bs(int A, int B)
{
long long left = 0, right = 1LL * A * B, ans;
while (left <= right)
{
ans = (left + right) / 2;
int sol = 0;
long long C = A;
while (C <= ans)
{
sol += ans / C;
C *= A;
}
if (sol < B)
left = ans + 1;
else
right = ans - 1;
}
return left;
}
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
scanf("%d%d", &P, &Q);
int i = 2;
while (P > 1)
{
if (i * i > P)
i = P;
int put = 0;
while (P % i == 0)
{
put ++;
P /= i;
}
long long sol = bs(i, put * Q);
if (sol > MAX) MAX = sol;
i++;
}
printf("%lld", MAX);
}