Pagini recente » Cod sursa (job #1365903) | Cod sursa (job #2774923) | Cod sursa (job #2372909) | Cod sursa (job #716723) | Cod sursa (job #342532)
Cod sursa(job #342532)
#include <stdio.h>
#include <math.h>
#define MAX_N 100
int p, q, d, n, ok;
int fact[MAX_N], put[MAX_N];
long long st, dr, mid, f, sol, nr;
void get_fact() {
d = 1;
while (p != 1) {
d++;
if (p % d == 0) fact[++n] = d;
while (p % d == 0) {
p /= d;
put[n] += q;
}
if (d > sqrt(p) && p != 1) {
fact[++n] = p;
put[n] = q;
p = 1;
}
}
}
void cit() {
freopen("gfact.in", "r", stdin);
freopen("gfact.out", "w", stdout);
scanf("%d %d", &p, &q);
get_fact();
}
void solve() {
st = 0, dr = 1LL * 700000000 * 100000;
while (st + 1 < dr) {
ok = 1;
mid = 1LL * (st + dr) / 2;
for (int i = 1; i <= n; i++) {
nr = 0;
f = 1;
while (f <= mid / fact[i]) {
f *= fact[i];
nr += mid / f;
}
if (nr < put[i]) ok = 0;
}
if (ok) {
if (sol == 0 || sol > mid) sol = mid;
dr = mid;
}
else st = mid;
}
printf("%lld\n", sol);
}
int main() {
cit();
solve();
return 0;
}