Pagini recente » Cod sursa (job #723011) | Cod sursa (job #189560) | Cod sursa (job #1701162) | Cod sursa (job #875155) | Cod sursa (job #3125794)
#include <bits/stdc++.h>
using namespace std;
ifstream in("frac.in");
ofstream out("frac.out");
#define int long long
int n,p,N;
vector<int>f;
bool iau[20];
int sum;
int nrr;
void afis()
{
int pr = 1,tip = -1;
for (int i = 0; i < f.size(); i++)
{
if (iau[i] == true)
{
tip = -tip;
pr *= f[i];
}
}
if (pr != 1)
sum += (tip * (nrr / pr));
}
void bkt(int pos)
{
if (pos == f.size())
afis();
else
{
iau[pos] = false;
bkt(pos + 1);
iau[pos] = true;
bkt(pos + 1);
}
}
int cate(int x)
{
nrr = x;
sum = 0;
bkt(0);
//out << x << ' ' << sum << '\n';
return x - sum;
}
signed main()
{
in >> n >> p;
N = n;
for (int i = 2; i * i <= n; i++)
{
if (n % i == 0)
{
f.push_back(i);
while (n % i == 0)
n /= i;
}
}
if (n != 1)
f.push_back(n);
int st = 0,pas = 1ll << 60;
while (pas != 0)
{
if (cate(st + pas) < p)
st += pas;
pas /= 2ll;
}
st++;
out << st;
return 0;
}