Pagini recente » Cod sursa (job #1224278) | Cod sursa (job #2601798) | Cod sursa (job #2936640) | Cod sursa (job #3218784) | Cod sursa (job #3262646)
#include <bits/stdc++.h>
using namespace std;
ifstream f("frac.in");
ofstream g("frac.out");
const int NMAX=3e5;
int main()
{
long long n,p;
f>>n>>p;
long long v[NMAX+1];
v[1]=1;
long long nr=1;
long long d=2;
while(d*d<=n)
{
if(n%d==0)
{
while(n%d==0)
{
n/=d;
}
for(long long i=1;i<=nr;i++)
{
v[i+nr]=-d*v[i];
}
nr*=2;
}
d++;
}
if(n>1)
{
for(long long i=1;i<=nr;i++)
{
v[i+nr]=-n*v[i];
}
nr*=2;
}
long long st=1;
long long dr=LLONG_MAX/4;
long long sol;
while(st<=dr)
{
long long m=(st+dr)/2;
long long s=0;
for(long long i=1;i<=nr;i++)
{
s+=m/v[i];
}
if(s>=p)
{
sol=m;
dr=m-1;
}
else
{
st=m+1;
}
}
g<<sol;
return 0;
}