Pagini recente » Cod sursa (job #2149696) | Cod sursa (job #471854) | Istoria paginii runda/sim_ix_29_ian_2021/clasament | Cod sursa (job #2903544) | Cod sursa (job #348302)
Cod sursa(job #348302)
#include <stdio.h>
#include <math.h>
#define DIM 1005
#define ll long long
ll v[DIM][2];
ll p,q,n,m,nrt;
void init ()
{
ll i,put,lim;
for (i=2, lim=2*(ll)sqrt (p); p!=1; )
if (p%i==0)
{
for (put=0; p%i==0; p/=i, ++put);
v[++m][0]=i;
v[m][1]=put*q;
}
else if (i<=lim)
{
if (i==2)
i=3;
else
i+=2;
}
else
{
v[++m][0]=p;
v[m][1]=q;
p=1;
}
}
inline ll det (ll nr,ll prim)
{
ll x;
for (x=0; nr; x+=(nr/=prim));
return x;
}
inline ll cbin (ll prim,ll put)
{
ll st,dr,mij,nr;
for (st=1, dr=put; st<=dr; )
{
mij=(st+dr)/2;
nr=det (mij,prim)+mij;
if (nr==put)
return mij;
else if (nr<put)
st=mij+1;
else
dr=mij-1;
}
return st;
}
inline ll max (ll a,ll b)
{
if (a>b)
return a;
return b;
}
void solve ()
{
ll i;
for (i=1; i<=m; ++i)
nrt=max (nrt,cbin (v[i][0],v[i][1])*v[i][0]);
printf ("%lld",nrt);
}
int main ()
{
freopen ("gfact.in","r",stdin);
freopen ("gfact.out","w",stdout);
scanf ("%lld%lld",&p,&q);
init ();
solve ();
return 0;
}