Pagini recente » Cod sursa (job #195797) | Cod sursa (job #1196868) | Cod sursa (job #2610727) | Cod sursa (job #2207741) | Cod sursa (job #2096626)
#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;
int ans;
void descompunere();
bool check(int arg, int p, int q)
{
int nr = 0, tmp = p;
while(tmp <= arg * p)
{
nr += (arg * p) / tmp;
tmp *= p;
}
return (nr >= Q * q);
}
int main()
{
in >> P >> Q;
descompunere();
for(auto it: fact)
{
int st = 1, dr = it.q * Q, last;
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, 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});
}