Pagini recente » Cod sursa (job #1897532) | Cod sursa (job #2121838) | Cod sursa (job #2897416) | Cod sursa (job #155691) | Cod sursa (job #320029)
Cod sursa(job #320029)
#include <stdio.h>
#define DIM 105
#define ll long long
ll div[DIM];
ll n,m,p,sol;
void diviz ()
{
ll i;
for (i=2; i*i<n; ++i)
if (n%i==0)
{
div[++m]=i;
for ( ; n%i==0; n/=i);
}
if (n!=1)
div[++m]=n;
}
ll calc (ll val)
{
ll i,j,nr,d,nrc=0;
for (i=1; i<(1<<m); ++i)
{
for (j=nr=0, d=1; j<m; ++j)
if (i&(1<<j))
{
++nr;
d*=div[j+1];
}
if (nr%2==1)
nrc+=val/d;
else
nrc-=val/d;
}
return nrc;
}
void solve ()
{
ll st,dr,mij,nr;
for (st=1, dr=(1LL<<61); st<=dr; )
{
mij=(st+dr)/2;
nr=mij-calc (mij);
if (nr==p)
sol=mij;
if (nr<p)
st=mij+1;
else
dr=mij-1;
}
printf ("%lld",sol);
}
int main ()
{
freopen ("frac.in","r",stdin);
freopen ("frac.out","w",stdout);
scanf ("%lld%lld",&n,&p);
diviz ();
solve ();
return 0;
}