Pagini recente » Cod sursa (job #1836880) | Cod sursa (job #1595967) | Cod sursa (job #1651743) | Cod sursa (job #113411) | Cod sursa (job #1127331)
#include<fstream>
#define ll long long
using namespace std;
ifstream f("frac.in");
ofstream g("frac.out");
ll p,n,nr,mij,sol,d,li,ls,di[40];
ll put;
inline ll verif(ll x)
{
int nrb,c;
ll sol=x;
for(int conf=1;conf<=put;++conf)
{
nrb=0;
c=1;
for(int i=0;i<nr;++i)
if(conf&(1<<i))
c*=di[i],++nrb;
if(nrb%2)
sol-=x/c;
else
sol+=x/c;
}
return sol;
}
int main()
{
f>>n>>p;
for(d=2;d*d<=n;++d)
if(n%d==0)
{
di[nr++]=d;
while(n%d==0)
n/=d;
}
if(n!=1)
di[nr++]=n;
put=(1<<nr)-1;
li=1;
ls=1LL<<61;
while(li<=ls)
{
mij=(li+ls)>>1;
if(verif(mij)>=p)
ls=mij-1,sol=mij;
else
li=mij+1;
}
g<<sol<<'\n';
return 0;
}