Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1037079) | Monitorul de evaluare | Cod sursa (job #1302783)
#include<fstream>
using namespace std;
long long p, q, a, i, st, dr, pp;
long long b, pt, mid, maxim, x;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
int main(){
fin>> p >> q;
a = p;
for(i = 2; i * i <= p; i++){
pp = 0;
while(a % i == 0){
pp++;
a /= i;
}
pp *= q;
if(pp != 0){
st = 1;
dr = pp;
while(st <= dr){
mid = (st + dr) / 2;
b = mid * i;
pt = 0;
x = i;
while(x <= b){
pt += b / x;
x *= i;
}
if(pt >= pp){
dr = mid - 1;
}
else{
st = mid + 1;
}
}
if(st * i> maxim){
maxim = st * i;
}
}
}
if(a != 1){
pp = q;
st = 1;
dr = pp;
while(st <= dr){
mid = (st + dr) / 2;
b = mid * i;
pt = 0;
x = i;
while(x <= b){
pt += b / x;
x *= i;
}
if(pt >= pp){
dr = mid - 1;
}
else{
st = mid + 1;
}
}
if(st * i> maxim){
maxim = st * i;
}
}
fout<< maxim;
return 0;
}