Pagini recente » Cod sursa (job #143829) | Cod sursa (job #238826) | Cod sursa (job #1137921) | Cod sursa (job #1187361) | Cod sursa (job #492139)
Cod sursa(job #492139)
#include <stdio.h>
#include <math.h>
long long p[100];
long long q[100];
void desc(int n)
{
int i,nr,t;
t=0;
for(i=2;i*i<n;i++)
{
nr=0;
if(n%i!=0)
continue;
else
while(n%1==0)
{
nr++;
n=n/i;
}
p[++t]=i;
p[t]=nr;
}
if(n!=1)
{
p[++t]=n;
q[t]=1;
}
p[0]=t;
q[0]=t;
}
int nri(int n,int p)
{
int nr=0;
while(n>=p)
{
nr=nr+n/p;
n=n/p;
}
return nr;
}
bool ok(int n)
{
int i,num;
for(i=1;i<=p[0];i++)
{
num=nri(n,p[i]);
if(num<q[i])
return false;
}
return true;
}
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
long long a,b,i,pas,st,dr,m;
scanf("%lld%lld",&a,&b);
i=0;
desc(a);
for(i=1;i<=p[0];i++)
{
q[i]*=b;
}
st=1;
dr=1<<30;
while(st<=dr)
{
m=(st+dr)/2;
if(!ok(m))
st=m+1;
else
dr=m-1;
}
printf("%lld",st);
return 0;
}