Pagini recente » Cod sursa (job #286381) | Cod sursa (job #2709799) | Cod sursa (job #1409591) | Cod sursa (job #2907141) | Cod sursa (job #354545)
Cod sursa(job #354545)
#include<stdio.h>
int b,q,n;
int v[12],p[12];
void read()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
scanf("%d%d",&b,&q);
int i,cb=b;
for(i=2;i*i<=cb;i++)
if(b%i==0)
{
v[++n]=i;
while(b%i==0)
{
p[n]++;
b=b/i;
}
}
if(b>1)
{
v[++n]=b;
p[n]=1;
}
}
int exista(int i, int x)
{
int y=x;
while(x)
{
y=y+x/v[i];
x=x/v[i];
}
if(y>=p[i]*q)
return 1;
return 0;
}
void rez()
{
int i,st,dr,m,sol,j;
long long x,min=2000000000*(long long)20000000;
for(i=1;i<=n;i++)
{
st=1;
dr=p[i]*q;
while(st<=dr)
{
m=(st+dr)>>1;
if(exista(i,m))
{
sol=m;
dr=m-1;
}
else
st=m+1;
}
x=1;
for(j=1;j<=sol;j++)
x=x*v[i];
if(x<min)
min=x;
}
printf("%lld\n",min);
}
int main()
{
read();
rez();
return 0;
}