Pagini recente » Cod sursa (job #1802577) | Cod sursa (job #3161135) | Cod sursa (job #2305772) | Borderou de evaluare (job #702917) | Cod sursa (job #2966823)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("frac.in");
ofstream out ("frac.out");
#define int long long
int n;
vector<int>pinex;
int check (int x)
{
int ret = 0;
for (int y : pinex)
{
ret += x / y;
}
return ret;
}
vector<int>divs;
bitset<15>vis;
void bkt (int k, bool df, int curr)
{
if (k == divs.size())
{
if (!df)
pinex.push_back(curr);
else
pinex.push_back(-curr);
return;
}
if (curr % divs[k] == 0)
curr /= divs[k], df ^= 1;
bkt(k+1, df, curr);
df ^= 1;
curr *= divs[k];
bkt(k+1, df, curr);
}
signed main()
{
int m;
in >> n >> m;
int d=2;
while (d * d <= n)
{
if (n % d == 0)
{
while (n % d == 0)
n /= d;
divs.push_back(d);
}
d++;
}
if (n > 1)
divs.push_back(n);
bkt(0, 0, 1);
int l=1, r=2e18;
while (l < r)
{
int mid = (l + r) / 2;
if (check(mid) >= m)
r = mid;
else
l = mid + 1;
}
out << r;
return 0;
}