Pagini recente » Cod sursa (job #2471656) | Cod sursa (job #1121279) | Statistici Purdel Doina (purdeldoina) | Istoria paginii utilizator/mihaitacornestean | Cod sursa (job #1296720)
#include <fstream>
using namespace std;
typedef long long lld;
const int kMaxDiv = 11, kMaxConf = 1030;
ifstream fin("frac.in");
ofstream fout("frac.out");
lld N, P;
int nrf, conf;
lld f[kMaxDiv], val[kMaxConf];
lld Count(lld lim) {
lld ans = 0;
for (int i = 0; i < conf; ++i)
ans += lim / val[i];
return ans;
}
lld BinarySearch() {
lld ans = 0, step = 1LL << 60;
while (step) {
if (Count(ans | step) < P)
ans |= step;
step >>= 1;
}
return ans + 1;
}
int main() {
fin >> N >> P;
for (lld i = 2; i * i <= N; ++i)
if (N % i == 0) {
f[nrf++] = i;
while (N % i == 0)
N /= i;
}
if (N > 1)
f[nrf++] = N;
conf = 1 << nrf;
for (int i = 0; i < conf; ++i) {
val[i] = 1;
for (int j = 0; j < nrf; ++j)
if (i & (1 << j))
val[i] *= -f[j];
}
fout << BinarySearch() << "\n";
return 0;
}