Pagini recente » Cod sursa (job #2797076) | Cod sursa (job #209847) | Cod sursa (job #1593769) | Cod sursa (job #809543) | Cod sursa (job #653707)
Cod sursa(job #653707)
#include<stdio.h>
#include<math.h>
using namespace std;
long w,i,j,nn,k,nr2,jj;
long long s[10000],n,m,e[10000],st,dr,x,nr;
long long nr_indiv(long long x)
{long long s1=0;
for(long i=1;i<=w;++i)
{s1+=(x/s[i]);}
return (x-s1);
}
int main()
{
freopen("frac.in","r",stdin);
freopen("frac.out","w",stdout);
scanf("%lld%lld",&n,&m);
if(n==1){printf("%lld\n",m);return 0;}
nn=sqrt(n);
for(i=2;i<=nn;++i)
if(n%i==0)
{
e[++k]=i;
while(n%i==0){n/=i;}
}
if(n!=1)e[++k]=n;
w=(1<<k)-1;
for(i=1;i<=w;++i)
{
nr2=0;s[i]=1;
for(j=1,jj=1;j<=i;j*=2,jj++)
{
if((i&j)>0)s[i]*=e[jj],nr2++;
}
if(nr2%2==0)s[i]=-s[i];
}
st=1;
dr=(1ll<<61);
while(st<dr)
{
x=(st+dr)/2;
nr=nr_indiv(x);
if(nr>=m)dr=x;
else st=x+1;
}
printf("%lld\n",dr);
return 0;
}