Pagini recente » Cod sursa (job #93842) | Cod sursa (job #1929158) | Cod sursa (job #2622980) | Cod sursa (job #2982452) | Cod sursa (job #548610)
Cod sursa(job #548610)
#include<stdio.h>
#include<math.h>
#define Nmax 200
long long nr,p,a[Nmax],k,i,j,n,q,st=0,dr=(long long)1<<61,m;
long long pinex(long long q)
{
long long s=0;
for (int i=1;i<=(1<<nr)-1;i++)
{
p=-1;
for (int j=0;j<=nr-1;j++)
if (i&(1<<j))
p=p*a[j+1]*(-1);
s+=(q/p);
}
return q-s;
}
void factori(int n)
{
long long m=n;
for (i=2;i<=sqrt(m);i++)
if (n%i==0)
{
a[++nr]=i;
while (n%i==0) n/=i;
}
if (n!=1) a[++nr]=n;
}
int main()
{
freopen("frac.in","r",stdin);
freopen("frac.out","w",stdout);
scanf("%lld%lld",&n,&k);
factori(n);
while (st<=dr)
{
m=(st+dr)/2;
if (pinex(m)>=k)
{
q=m;
dr=m-1;
}
else st=m+1;
}
printf("%lld\n",q);
return 0;
}