Pagini recente » Cod sursa (job #723929) | Cod sursa (job #1806997) | Cod sursa (job #2261888) | Cod sursa (job #261382) | Cod sursa (job #1479643)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
typedef long long int var;
const int NMax = 50000;
var k;
var a[NMax], b[NMax];
var bin_search(var D, var power, var hi){
var lo = 1, mid, R, pos;
while(lo <= hi){
mid = (lo + hi) >> 1;
R = 0;
for(var x = D; x <= mid; x *= D){
R += mid / x;
}
if(R >= power){
pos = mid;
hi = mid - 1;
} else {
lo = mid + 1;
}
}
return pos;
}
int main(){
var p, q, cp, exp, ans;
fin >> p >> q;
cp = sqrt(p);
for(int i = 2; i <= cp; i++){
if(p % i == 0){
for(exp = 0; p % i == 0; exp++){
p /= i;
}
a[++k] = i;
b[k] = exp * q;
}
}
if(p > 1){
a[++k] = p;
b[k] = q;
}
ans = 0;
for(int i = 1; i <= k; i++){
ans = max(ans, bin_search(a[i], b[i], a[i] * b[i]));
}
fout << ans;
return 0;
}