Pagini recente » Cod sursa (job #220234) | Cod sursa (job #1798298) | Cod sursa (job #2961804) | Cod sursa (job #1392825) | Cod sursa (job #589052)
Cod sursa(job #589052)
#include<stdio.h>
long long nr,n,m,d[20];
void desc()
{
long long i;
for (i=2; i*i<=n; i++)
if (n%i==0)
{
d[nr++]=i;
while(n%i==0)
n/=i;
}
if (n!=1)
d[nr++]=n;
}
long long f(long long x)
{
long long r=0,p;
int i,j,par;
for (i=0; i<((long long)1<<nr); ++i)
{
par=1;
p=1;
for (j=0; j<nr; ++j)
if ((i & (1<<j)) != 0)
{
p*=d[j];
par*=-1;
}
r+=x/(par*p);
}
return r;
}
long long caut()
{
long long i, pas=(long long) 1<<60;
for (i=0; pas!=0; pas>>=1)
{
//printf("%lld %lld\n",i,pas);
if (f(i+pas)<m)
i+=pas;
}
return i+1;
}
int main()
{
freopen("frac.in","r",stdin);
freopen("frac.out","w",stdout);
scanf("%lld%lld",&n,&m);
desc();
printf("%lld",caut());
return 0;
}