Pagini recente » Cod sursa (job #3142113) | Cod sursa (job #455247) | Cod sursa (job #2228309) | Cod sursa (job #2611973) | Cod sursa (job #1641150)
#include <fstream>
using namespace std;
ifstream fin("frac.in");
ofstream fout("frac.out");
long long n, p, fact[30];
void read()
{
fin>>n>>p;
}
void prep(long long nr)
{
for(int i=2;i*i<=n;i++)
{
if(nr%i==0)
{
fact[++fact[0]]=i;
while(nr%i==0)
nr/=i;
}
}
if(nr>1)
{
fact[++fact[0]]=nr;
nr=1;
}
}
long long verif(long long A)
{
long long sol=A;
for(int i=1;i<(1 << fact[0]);i++)
{
long long prod=1;
for(int j=0;j<fact[0];j++)
{
if((1 << j) & i)
prod=1LL*prod*-fact[j+1];
}
sol=sol+1LL*A/prod;
}
return sol;
}
void solve()
{
long long st=1, dr=(1LL << 61), poz;
while(st<=dr)
{
long long mid=st+(dr-st)/2;
if(verif(mid)<p)
st=mid+1;
else
{
poz=mid;
dr=mid-1;
}
}
fout<<poz;
}
int main()
{
read();
prep(n);
solve();
return 0;
}