Pagini recente » Cod sursa (job #1791978) | Cod sursa (job #1275059) | Cod sursa (job #2183159) | Cod sursa (job #762394) | Cod sursa (job #215589)
Cod sursa(job #215589)
# include <cstdio>
# include <math.h>
# define FIN "gfact.in"
# define FOUT "gfact.out"
# define MAXN 100
long long P,R,Q,i,j,N,max,sol;
long long D[MAXN];
long long O[MAXN];
long long cauta(long long f,long long P,long long Q)
{
long long st,dr,mij,rez,cont,baza;
st = f; dr = P*Q; rez = 0;
while (st <= dr)
{
mij = (st + dr) >> 1;
baza = P; cont = 0;
for (; baza <= mij;)
{
cont += mij/baza;
baza *= P;
}
if (cont >= Q)
{
rez = mij;
dr = mij-1;
}
else
st = mij+1;
}
return rez;
}
int main()
{
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
scanf("%lld%lld",&P,&Q);
N = 0;
R = (long long) sqrt(P);
for (i = 2; i <= R; ++i)
if (!(P%i))
{
D[++N] = i;
for (; !(P%i);)
{
O[N]++;
P /= i;
}
O[N] = O[N]*Q;
}
if (P > 1)
{
++N;
D[N] = P;
O[N] = Q;
}
for (i = 1; i <= N; ++i)
{
sol = cauta(1,D[i],O[i]);
if (sol > max) max = sol;
}
printf("%lld",sol);
return 0;
}