Pagini recente » Rating Vasile Dan (danezu55) | Cod sursa (job #566366) | Cod sursa (job #1081718) | Cod sursa (job #16077) | Cod sursa (job #3224843)
#include <bits/stdc++.h>
using namespace std;
long long n, p;
vector <long long> v;
long long ok(int x)
{
long long ans = 0;
long long configNo = (1ll << v.size()) - 1;
for(long long mask = 1; mask <= configNo; mask ++)
{
bool ok = 1;
int bits = 0;
long long div = 1;
for(int i = 0; i < v.size() && ok; i ++)
{
if((1ll << i) & mask)
{
bits++;
div *= v[i];
if(div >= x)
ok = 0;
}
}
if(bits % 2)
ans += x / div;
else
ans -= x / div;
}
return ans;
}
long long bs()
{
long long st = 1, dr = 1e18, med, last = -1;
while(st <= dr)
{
med = (st + dr) / 2;
if(med - ok(med) >= p)
{
dr = med - 1;
last = med;
}
else
st = med + 1;
}
return last;
}
int main()
{
ios_base :: sync_with_stdio(0);
cin.tie(0);
freopen("frac.in", "r", stdin);
freopen("frac.out", "w", stdout);
cin >> n >> p;
long long d = 2;
while(d * d <= n)
{
int ok = 0;
while(n % d == 0)
{
n /= d;
ok = 1;
}
if(ok == 1)
v.push_back(d);
d ++;
}
if(n != 1)
v.push_back(n);
cout << bs();
return 0;
}