Pagini recente » Cod sursa (job #3245116) | Cod sursa (job #3228459) | Cod sursa (job #323123) | Cod sursa (job #2930993) | Cod sursa (job #526190)
Cod sursa(job #526190)
#include <cstdio>
long long n,p,cont;
int prim[20];
void d()
{
long long i;
for(i=2; i*i<=n; i++)
if(!(n%i))
{
prim[++cont]=i;
while(!(n%i)) n/=i;
}
if(n>1) prim[++cont]=n;
}
long long f(long long x)
{
int i, j, lim = (1 << cont) - 1;
long long nr = 0, p;
for (i = 0; i <= lim; i ++)
{
p = 1;
for (j = 1; j <=cont; j ++)
if (i & (1 << j - 1))
p=p * -1 * prim[j];
nr=nr+x/p;
}
return nr;
}
int main()
{
freopen("frac.in","r",stdin);
freopen("frac.out","w",stdout);
scanf("%lld %lld",&n,&p);
d();
long long st=0,dr=1LL<<61,m,sol=0;
for(m=(st+dr)/2;st<=dr;m=(st+dr)/2)
{
if (f (m) >= p)
{
sol = m;
dr = m - 1;
}
else st = m + 1;
}
printf("%lld\n",sol);
return 0;
}