Pagini recente » Cod sursa (job #2486791) | Cod sursa (job #1763257) | Cod sursa (job #906377) | Cod sursa (job #1571442) | Cod sursa (job #2952806)
#include <fstream>
using namespace std;
long long D[110];
long long n, dr, k, p;
long long rez(long long m) {
long long sol = 0;
for (long long x = 1; x < (1 << k); x++) {
long long prod = 1, nr = 0;
for (long long i = 0; i < k; i++) {
if ((x >> i) & 1) {
prod *= D[i + 1], nr++;
}
}
if (prod != 1) {
if (nr % 2) {
sol += m / prod;
} else {
sol -= m / prod;
}
}
}
if (sol > 0) {
m -= sol;
} else {
m += sol;
}
return m >= p;
}
int main() {
ifstream fin("frac.in");
ofstream fout("frac.out");
fin >> n >> p;
long long d = 2;
while (d * d <= n && n != 1) {
long long e = 0;
while (n % d == 0) {
e++;
n /= d;
}
if (e != 0) {
D[++k] = d;
}
d++;
}
if (n != 1) {
D[++k] = n;
}
long long st = 1;
dr = (1LL << 61);
while (st <= dr) {
long long mid = (st + dr) / 2;
if (rez(mid))
dr = mid - 1;
else
st = mid + 1;
}
fout << st;
return 0;
}