Pagini recente » Cod sursa (job #443829) | Cod sursa (job #1263055) | Cod sursa (job #1850722) | Cod sursa (job #166483) | Cod sursa (job #3315973)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
long long p, q, divizor[15], putere[15], m;
long long multipli (long long n, long long x) {
long long y = x, cnt = 0;
while (y <= n) {
cnt += n / y;
if (y > n / x)
break;
y *= x;
}
return cnt;
}
bool poate (long long n) {
for (long long i = 1; i <= m; i++) {
if (multipli (n, divizor[i]) < putere[i])
return false;
}
return true;
}
int main() {
fin >> p >> q;
long long d = 2;
while (d * d <= p) {
int exponent = 0;
while (p % d == 0) {
exponent++;
p /= d;
}
if (exponent != 0) {
divizor[++m] = d;
putere[m] = exponent * q;
}
d++;
}
if (p > 1) {
divizor[++m] = p;
putere[m] = q;
}
long long st = 1, dr = 1ll * 6 * 1e13, sol = 0;
while (st <= dr) {
long long m = (st + dr) / 2;
if (poate(m) == true) {
sol = m;
dr = m - 1;
}
else
st = m + 1;
}
fout << sol << "\n";
return 0;
}