Pagini recente » Cod sursa (job #3323542) | Cod sursa (job #3342266) | Cod sursa (job #2096408) | Cod sursa (job #3310650) | Cod sursa (job #3309085)
#include <bits/stdc++.h>
#define f first
#define s second
#define ll long long
using namespace std;
ifstream fin("frac.in");
ofstream fout("frac.out");
ll l = 1, r = 1ll << 61;
ll num, goal, res, m;
vector<int> divs;
void findPrimes()
{
ll x = num;
ll d = 2;
while(x > 1) {
if(x % d == 0) {
divs.push_back(d);
while(x % d == 0)
x /= d;
}
d++;
if(x > 1 && d * d > x)
d = x;
}
}
ll pinex(int it, ll prod, ll sign)
{
ll res = m / prod * sign;
for(int i = it; i < divs.size(); i++) {
res += pinex(i + 1, prod * divs[i], sign * -1);
}
return res;
}
int main()
{
fin >> num >> goal;
findPrimes();
while(l <= r) {
m = (l + r) / 2;
ll primes = pinex(0, 1, 1);
if(primes < goal)
l = m + 1;
else
res = m, r = m - 1;
}
fout << res;
return 0;
}