Pagini recente » Cod sursa (job #2130849) | Profil rares22iunie | Cod sursa (job #3130839) | Cod sursa (job #3121753) | Cod sursa (job #2096640)
#include <bits/stdc++.h>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
#define p first
#define q second
int P, Q;
vector<pair<int, int>> fact;
long long ans;
void descompunere();
bool check(int arg, int p, int q)
{
int nr = 0;
long long tmp = p, lim = 1LL * arg * p;
while(tmp <= lim)
{
nr += lim / tmp;
tmp *= 1LL * p;
}
return (nr >= Q * q);
}
int main()
{
in >> P >> Q;
descompunere();
for(auto it: fact)
{
int st = 1, dr = it.q * Q, last = -1;
while(st <= dr)
{
int med = (st + dr) / 2;
if(check(med, it.p, it.q))
{
dr = med - 1;
last = med;
}
else st = med + 1;
}
ans = max(ans, 1LL * last * it.p);
}
out << ans << '\n';
return 0;
}
void descompunere()
{
int putere;
for(int d = 2; d * d <= P && P > 1; d++)
{
putere = 0;
while(P % d == 0)
{
P /= d;
putere++;
}
if(putere)
fact.push_back({d, putere});
}
if(P > 1)
fact.push_back({P, 1});
}