Pagini recente » Cod sursa (job #2633769) | Cod sursa (job #1242225) | Cod sursa (job #161246) | Cod sursa (job #622076) | Cod sursa (job #1536097)
#include <cstdio>
#include <algorithm>
#include <climits>
#define maxN 200005
using namespace std;
long long p, q, i, sol, m;
long long legendre(long long n, long long f)
{
long long pf=f, sum=0;
while(pf <= n)
sum += n/pf, pf *= f;
return sum;
}
long long cb(long long f,long long pt)
{
long long st=1, dr=1<<30;
while(st <= dr)
{
m = (st+dr)/2;
if(legendre(m, f) >= pt)
dr = m - 1;
else st = m+1;
}
//m=(st+dr)/2;
if(legendre(m,f) < pt)
m++;
return m;
}
int main()
{
freopen("gfact.in", "r", stdin);
freopen("gfact.out", "w", stdout);
scanf("%lld %lld", &p, &q);
long long d=2;
long long aux=p;
while(d * d <= aux)
{
long long exp=0;
while(aux%d == 0)
exp++, aux /= d;
if(exp)
sol = max(sol, cb(d, exp*q));
d++;
}
if(aux!=1)
sol = max(sol, cb(aux, q));
printf("%lld", sol);
return 0;
}