Pagini recente » Cod sursa (job #3174157) | Cod sursa (job #2716909) | Cod sursa (job #1470978) | Cod sursa (job #3256257) | Cod sursa (job #2737153)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("frac.in");
ofstream fout("frac.out");
typedef long long ll;
vector<ll> fac;
ll xCount(ll val)
{
ll rez = 0;
for(int msk = 0; msk < (1LL << (int)fac.size()); ++msk){
ll vv = 1;
for(int i = 0; i < (int)fac.size() && vv <= val; ++i)
if((1LL << i) & msk)
vv *= fac[i];
if(__builtin_popcount(msk) % 2 == 1)
rez -= val / vv;
else rez += val / vv;
}
return rez;
}
int main()
{
ll n, p;
fin >> n >> p;
ll d = 2;
ll cp = n;
while(d * d <= cp)
{
int exp = 0;
while(cp % d == 0)
{
cp /= d;
++exp;
}
if(exp)
fac.push_back(d);
++d;
}
if(cp > 1)
fac.push_back(cp);
ll st = 1;
ll dr = LLONG_MAX - 2;
ll best = 0;
while(st <= dr)
{
ll mij = (st + dr) / 2;
ll nr = xCount(mij);
if(nr >= p){
best = mij;
dr = mij - 1;
}
else st = mij + 1;
}
fout << best << '\n';
return 0;
}