Pagini recente » Cod sursa (job #2960220) | Cod sursa (job #381842) | Cod sursa (job #1465287) | Cod sursa (job #72151) | Cod sursa (job #1896005)
#include <cstdio>
#include <cmath>
#include <vector>
using namespace std;
int factor;
long long exponent;
void descompunere(int n) {
int d = 2, e, lim;
lim = (int)sqrt((double) n);
while(d <= lim && n > 1) {
e = 0;
while(n % d == 0) {
n /= d;
++ e;
}
if(e > 1) {
factor = d;
exponent = e;
}
++ d;
}
if(n > 1) {
factor = n;
exponent = 1;
}
}
int p, q;
bool ok(long long b) {
long long rasp = 0;
int k;
k = factor;
while(b) {
rasp += b / k;
b /= k;
}
if(rasp >= exponent)
return 1;
return 0;
}
void binar() {
long long st, dr, med, last = -1;
st = 0;
dr = exponent * factor;
while(st <= dr) {
med = st + (dr - st) / 2;
if(ok(med)) {
last = med;
dr = med - 1;
} else {
st = med + 1;
}
}
printf("%lld\n", last);
}
int main() {
freopen("gfact.in", "r", stdin);
freopen("gfact.out", "w", stdout);
scanf("%d%d", &p, &q);
if(p == 1) {
printf("1");
return 0;
}
descompunere(p);
exponent *= q;
binar();
return 0;
}