Pagini recente » Cod sursa (job #2229624) | Cod sursa (job #1806602) | Cod sursa (job #2058414) | Cod sursa (job #1550123) | Cod sursa (job #1951134)
#include<cstdio>
int P, Q, divisor[1025], power[1025], k;
inline void factorize(int P){
if(P % 2 == 0){
divisor[++k] = 2;
while(P % 2 == 0) power[k]++, P /= 2;
}
for(int i = 3; i * i <= P; i += 2){
if(P % i == 0){
divisor[++k] = i;
while(P % i == 0) power[k]++, P /= i;
}
}
if(P > 1) divisor[++k] = P, power[k] = 1;
}
inline long long get_power(long long number, int divisor){
long long result = 0;
for(long long i = divisor; i <= number; i *= divisor){
result += number / i;
}return result;
}
inline bool check(long long B){
for(int i = 1; i <= k; i++){
if(get_power(B, divisor[i]) < power[i]){
return false;
}
}return true;
}
inline long long find(){
long long low = 1, high = 60000000000000, result;
while(low <= high){
long long middle = (low + high) / 2;
if(check(middle) == false){
low = middle + 1;
}else{
result = middle;
high = middle - 1;
}
}
return result;
}
int main(){
freopen("gfact.in", "r", stdin);
freopen("gfact.out", "w", stdout);
scanf("%d %d", &P, &Q);
factorize(P);
for(int i = 1; i <= k; i++){
power[i] *= Q;
}
printf("%lld", find());
return 0;
}