Pagini recente » Cod sursa (job #2709003) | Cod sursa (job #572788) | Cod sursa (job #714792) | Cod sursa (job #757206) | Cod sursa (job #562248)
Cod sursa(job #562248)
#include<stdio.h>
long long u,d[30],e[30],p,q;
long long nrd(long long x,long long y)
{
long long z=0;
while(x!=0)
{
z+=x/y;
x/=y;
}
return z;
}
int ok(long long x)
{
long long i;
for(i=1;i<=u;i++)
{
if(nrd(x,d[i])<e[i])
return 0;
}
return 1;
}
void desc(long long n)
{
for(long long i=2;i*i<=n;i++)
{
if(n%i==0)
{
d[++u]=i;
e[u]=1;
n/=i;
while(n%i==0)
{
e[u]++;
n/=i;
}
}
}
if(n!=1)
{
d[++u]=n;
e[u]=1;
}
}
long long cautbin()
{
long long i,pas=1<<30;
for(i=0;pas!=0;pas>>=1)
{
if(!ok(i+pas))
i+=pas;
}
return i+1;
}
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
scanf("%lld%lld",&p,&q);
desc(p);
for(long long i=1;i<=u;i++)
e[i]*=q;
printf("%lld",cautbin());
}