Pagini recente » Cod sursa (job #1954614) | Cod sursa (job #970025) | Cod sursa (job #1774515) | Cod sursa (job #993824) | Cod sursa (job #1593189)
#include<cstdio>
#include<cmath>
#include<algorithm>
#define DIM 50
using namespace std;
int k;
long long P, Q, MAX;
long long w[DIM], v[DIM];
const long long INF (1 << 63);
void desc(long long);
long long bs(int, int); //(long long, long long);
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
scanf("%lld%lld", &P, &Q);
desc(P);
for (int i = 1; i <= k; i++)
{
w[i] *= Q;
MAX = max(MAX, bs(v[i], w[i]));
}
printf("%lld", MAX);
}
void desc(long long A)
{
if (A % 2 == 0)
{
v[++k] = 2;
while (A % 2 == 0)
{
w[k]++;
A /= 2;
}
}
for (int i = 3; i * i <= A; i++)
if (A % i == 0)
{
v[++k] = i;
while (A % i == 0)
{
w[k] ++;
A /= i;
}
}
if (A > 1)
v[++k] = A, w[k] = 1;
}
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;
}