Pagini recente » Cod sursa (job #1751423) | Cod sursa (job #1236276) | Cod sursa (job #171905) | Cod sursa (job #1655335) | Cod sursa (job #470786)
Cod sursa(job #470786)
#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=1<<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;
}