Pagini recente » Cod sursa (job #586855) | Cod sursa (job #2585413) | Cod sursa (job #629989) | Cod sursa (job #3260534) | Cod sursa (job #1896062)
#include <cstdio>
#include <cmath>
using namespace std;
int factor, 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 > 0) {
factor = d;
exponent = e;
}
++ d;
}
if(n > 1) {
factor = n;
exponent = 1;
}
}
bool ok(long long b) {
int k, rasp = 0;
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", last);
}
int main() {
freopen("gfact.in", "r", stdin);
freopen("gfact.out", "w", stdout);
int p, q;
scanf("%d%d", &p, &q);
if(p == 1) {
printf("0");
return 0;
}
descompunere(p);
exponent *= q;
binar();
return 0;
}