Pagini recente » Cod sursa (job #1202640) | Cod sursa (job #2088300) | Cod sursa (job #1832877) | Cod sursa (job #2199405) | Cod sursa (job #2878567)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("frac.in");
ofstream fout("frac.out");
long long int n, p;
long long int fr(long long int x, long long int n) {
// nr de frac ireductibile cu numitorul n sunt <= cu (x / n)
// <=> cate nr prime intre ele cu n sunt mai mici sau egale cu x
long long int d = 2, nr = 0;
while(n > 1) {
int p = 0;
while(n % d == 0) {
p++;
n /= d;
}
if(p > 0) {
nr += (x / d);
}
d++;
if(d * d > n) {
d = n;
}
}
return x - (nr - x / 6 - x / 10 - x / 15 + x / 30);
}
int main() {
fin >> n >> p;
fin.close();
long long int st = 1, dr = (1LL << 62);
while(st <= dr) {
long long int mid = st + (dr - st) / 2;
if(fr(mid, n) > p) {
dr = mid - 1;
} else {
st = mid + 1;
}
}
fout << st;
return 0;
}