Pagini recente » Cod sursa (job #2351800) | Cod sursa (job #2137502) | Cod sursa (job #546201) | Cod sursa (job #1730102) | Cod sursa (job #2832681)
#include <fstream>
#include <climits>
#include <vector>
using namespace std;
ifstream cin("gfact.in");
ofstream cout("gfact.out");
int fact(int x, int div)
{
int ans = 0;
for (; x >= div; x /= div)
ans += x / div;
return ans;
}
vector <pair <int, int> > help;
int main()
{
int p, q;
cin >> p >> q;
int d = 2;
while (d * d <= p)
{
if (p % d == 0)
{
int aux = 0;
while (p % d == 0)
{
aux++;
p /= d;
}
int pwr = aux * q;
help.push_back({d, pwr});
}
d++;
}
if (p > 1)
help.push_back({p, q});
int st = 1, dr = INT_MAX - 1, sol = -1;
while (st <= dr)
{
int med = ((st + dr) >> 1);
bool ok = 0;
for (int i = 0; i < help.size(); i++)
{
int val = fact(med, help[i].first);
if (val < help[i].second)
{
ok = 1;
break;
}
}
if (!ok)
{
sol = med;
dr = med - 1;
}
else st = med + 1;
}
cout << sol;
}