Pagini recente » Cod sursa (job #481721) | Cod sursa (job #3193716) | Cod sursa (job #2730134) | Cod sursa (job #2469603) | Cod sursa (job #354159)
Cod sursa(job #354159)
#include<cstdio>
const long long MAX=(long long)1<<60;
long long p,q,n,a[100],b[100];
long long i;
void fact(long long m)
{
for(long long i=2;i*i<=m;i++)
{
if((m%i)==0)
{
++n;
a[n]=i;
}
while(m%i==0)
{
++b[n];
m/=i;
}
}
if(m!=1)
{
++n;
a[n]=m;
b[n]=1;
}
}
bool v(long long x, long long y, long long z)
{
long long nf=0;
while(x)
{
nf+=x/y;
x/=y;
}
if(nf>=z)
return true;
return false;
}
bool ok(long long x)
{
for(long long k=1;k<=n;k++)
if(v(x,a[k],b[k]*q)==false)
return false;
return true;
}
int main()
{
long long x;
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
scanf("%d%d",&p,&q);
n=0;
fact(p);
x=MAX;
for(i=1;x;x>>=1)
{
if(!ok(x+i))
{
i+=x;
}
}
printf("%lld ",i+1);
printf("\n");
return 0;
}