Pagini recente » Cod sursa (job #2505317) | Cod sursa (job #1495937) | Cod sursa (job #2932401) | Cod sursa (job #243715) | Cod sursa (job #3040493)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
const long long maxval = 6e13;
long long queue(int a, int q) {
vector<long long> pows;
long long p = 1;
while (p <= maxval) {
pows.push_back(p);
p *= a;
}
long long target = 1LL*q*(a - 1);
long long answer;
int st = 0, dr = pows.size() - 1;
while (st < dr) {
int mij = (st + dr)/2;
if (pows[mij] - 1 >= target) {
answer = pows[mij];
dr = mij - 1;
}
else
st = mij + 1;
}
return answer;
}
int main() {
int p, q;
fin >> p >> q;
int d = 2;
long long answer = 0;
while (d <= p) {
if (p % d == 0) {
int e = 0;
while (p % d == 0) {
e++;
p /= d;
}
answer = max(answer, queue(d, e*q));
}
d++;
}
fout << answer << endl;
return 0;
}