Pagini recente » Cod sursa (job #1798615) | Cod sursa (job #1745237) | Cod sursa (job #2090759) | Cod sursa (job #1451828) | Cod sursa (job #1593202)
#include<cstdio>
#include<cmath>
#include<algorithm>
#define DIM 50
using namespace std;
int k, put;
long long P, Q, MAX;
const long long INF (1 << 63);
void desc(int);
long long bs(int, int); //(long long, long long);
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
scanf("%d%d", &P, &Q);
desc(P);
printf("%lld", MAX);
}
void desc(int A)
{
if (A % 2 == 0)
{
put = 0;
while (A % 2 == 0)
{
put++;
A /= 2;
}
MAX = max(MAX, bs(2, put * Q));
}
for (int i = 3; 1LL * i * i <= A; i += 2)
if (A % i == 0)
{
put = 0;
while (A % i == 0)
{
put ++;
A /= i;
}
MAX = max(MAX, bs(i, put * Q));
}
if (A > 1)
MAX = max(MAX, bs(A, Q));
}
long long bs(int A, int B)
{
long long left = 0, right = 1LL * A * B;
while (left <= right)
{
long long ans = (left + right) / 2;
int sol = 0, C = A;
while (C <= ans)
{
sol += ans / C;
C *= A;
}
if (sol < B)
left = ans + 1;
else
right = ans - 1;
}
return left;
}