Pagini recente » Cod sursa (job #1354594) | Cod sursa (job #1596665) | Cod sursa (job #408552) | Cod sursa (job #1112352) | Cod sursa (job #2356612)
#include <bits/stdc++.h>
using namespace std;
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
long long st=1,dr=15000000,p,q;
scanf("%lld%lld",&p,&q);
if(p==1)
{
printf("1\n");
return 0;
}
long long d=2,e=0;
long long m1=0;
while(d*d<=p)
{
st=1,dr=1LL<<60;
e=0;
while(p%d==0)
{
p/=d;
e++;
}
if(e==0)
{
d++;
continue;
}
long long q1=q*e;
while(st<=dr)
{
long long med=(st+dr)/2;
long long x=0,p1=1,pl=med;
while(pl)
{
x+=pl/d;
pl/=d;
}
if(x>q1)dr=med-1;
if(x==q1)
{
m1=max(m1,med/d*d);
break;
}
if(x<q1)st=med+1;
}
d++;
}
if(p>1){d=p;
st=1;
dr=1LL<<60;
long long q1=q*1;
while(st<=dr)
{
long long med=(st+dr)/2;
long long x=0,p1=1,pl=med;
while(pl)
{
x+=pl/d;
pl/=d;
}
if(x>q1)dr=med-1;
if(x==q1)
{
m1=max(m1,med/d*d);
break;
}
if(x<q1)st=med+1;
}
}
printf("%lld\n",m1);
return 0;
}