Pagini recente » Cod sursa (job #364807) | Cod sursa (job #2835105) | Cod sursa (job #689083) | Cod sursa (job #1411172) | Cod sursa (job #2356462)
#include <cstdio>
#include <algorithm>
using namespace std;
int k,q;
int my_exp[10000];
int prim[10000];
void div (int n)
{
int d=2;
while(d*d<=n)
{
int p=0;
while(n%d==0)
{
n/=d;
p++;
}
my_exp[d]=p*q;
if(p)
{
prim[++k]=d;
}
d++;
}
if(n)
my_exp[n]=q,prim[++k]=n;
}
int lj(int n,int x)
{
int put=x,sum=0;
while(put<=n)
{
sum+=n/put;
put*=x;
}
return sum;
}
int bs(int x)
{
int st=1;int dr=1e9;
int mid=0;
int ans=0;
while(st<=dr)
{
mid=st+dr;mid/=2;
if(lj(mid,x)<my_exp[x])
st=mid+1;
else
{
ans=mid;
dr=mid-1;
}
}
return ans;
}
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
int p;
scanf("%d %d",&p,&q);
div(p);
int maxx=-1;
for(int i=1;i<=k;++i)
{
maxx=max(maxx,bs(prim[i]));
}
printf("%d",maxx);
return 0;
}