Pagini recente » Cod sursa (job #969405) | Cod sursa (job #849320) | Cod sursa (job #31066) | Cod sursa (job #2519129) | Cod sursa (job #3174001)
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream fin("frac.in");
ofstream fout("frac.out");
int n,p;
vector<int> d;
void calc_d() // n
{
int sq = sqrt(n);
for(int i=2; i <= sq && n > 1; i++)
{
if(n%i == 0)
{
d.push_back(i);
while(n%i == 0) n/=i;
}
}
if(n > 1) d.push_back(n);
}
int bkt(int i, int comp, int sign, int nr)
{
if(i == d.size())
{
return sign * nr / comp;
}
return bkt(i+1,comp,sign,nr) + bkt(i+1,comp * d[i],-sign,nr);
}
int nrnr(int nr)
{
return bkt(0,1,1,nr);
}
int32_t main()
{
fin>>n>>p;
calc_d();
int st = 0, dr = 1LL*(1<<30)*(1<<30)*4;
//cout<<dr;
int rasp = 0;
while(st <= dr)
{
int mij = (st + dr) / 2;
if(p <= nrnr(mij))
{
rasp = mij;
dr = mij-1;
}
else st = mij+1;
}
fout<<rasp;
return 0;
}