Pagini recente » Cod sursa (job #2559852) | Cod sursa (job #1945873) | Cod sursa (job #1620882) | Cod sursa (job #2184117) | Cod sursa (job #1401301)
#include<cstdio>
#include<algorithm>
#include<cstring>
#define Nmax 44735
using namespace std;
long long b,sol;
long long i,st,dr,mij;
bool w[Nmax-5];
long long pr[Nmax/5];
long long p[2005],d[2005],P,q,j,nr,s;
void numereprime()
{
long long i,k,j;
for (i=2;i<=Nmax-5;i++)
if (!w[i])
{
pr[++pr[0]]=i;
k=i*i*1LL;
for (j=k;j<=Nmax-5;j+=i)
w[j]=1;
}
}
void desc(long long x)
{
for (i=1;pr[i]*pr[i]*1LL<=x;i++)
if (x%pr[i])
{
d[++d[0]]=pr[i];
++p[0];
while (x%pr[i]) ++p[p[0]],x=x/pr[i];
}
if (x!=1) d[++d[0]]=x,p[++p[0]]=1,p[p[0]]*=q;
}
bool ok;
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
scanf("%lld %lld",&P,&q);
numereprime();
st=1; dr=700000000000; sol=dr+1;
p[0]=0; d[0]=0;
desc(P);
while (st<=dr)
{
mij=(st+dr)/2;
ok=1;
for (j=1;j<=d[0];j++)
{
nr=mij; s=0;
while (nr)
{
s+=nr/d[j];
nr=nr/d[j];
}
if (s<p[j]) {ok=0; break;}
}
if (ok)
sol=min(sol,mij),dr=mij-1;
else st=mij+1;
}
printf("%lld",sol);
return 0;
}