Pagini recente » Cod sursa (job #1566341) | Cod sursa (job #2215090) | Cod sursa (job #217425) | Cod sursa (job #2921756) | Cod sursa (job #976968)
Cod sursa(job #976968)
#include <cassert>
#include <cstdio>
long long v[25];
int main()
{
long long n=0,k=0,q=0,i=2,j=0,b=1,e=1,m=0,aux=0,x=0,a1=1,a2=1;
assert(freopen("frac.in","r",stdin));
assert(freopen("frac.out","w",stdout));
assert(scanf("%lld%lld",&n,&k));
while (i*i<=n)
{
if (n%i==0)
v[++q]=i;
while (n%i==0)
n/=i;
++i;
}
if (n>1)
v[++q]=n;
e=(long long)1<<61;
while (b<=e)
{
m=(b+e)/2;
aux=m;
for (i=1; i<(long long)1<<q; ++i)
{
x=1;
for (j=0; j<=q; ++j)
{
if (i&((long long)1<<j))
x*=-v[j+1];
a2*=2;
}
m+=aux/x;
}
if (m>=k)
e=aux-1;
else
b=aux+1;
}
printf("%lld\n",b);
return 0;
}