Pagini recente » Cod sursa (job #2893841) | Cod sursa (job #2165328) | Cod sursa (job #2335914) | Cod sursa (job #2129444) | Cod sursa (job #2284607)
#include <fstream>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
long long p, q, d = 2;
long long b[15], e[15], sz;
bool possible(long long x)
{
for(long long i = 1; i <= sz; i++)
{
long long baza = b[i];
long long exp = 0;
while(x/baza)
{
exp += x/baza;
baza *= b[i];
}
if(exp < e[i])
return false;
}
return true;
}
long long cautbin(long long l, long long r)
{
while(l < r)
{
long long m = (l+r) / 2;
if(possible(m))
r = m;
else
l = m+1;
}
return r;
}
int main()
{
in >> p >> q;
while(d * d <= p)
{
if(p % d == 0)
{
long long exp = 0;
while(p % d == 0)
{
exp++;
p /= d;
}
b[++sz] = d;
e[sz] = exp * q;
}
}
if(p != 1)
{
b[++sz] = p;
e[sz] = q;
}
out << cautbin(0, (1 << 30));
return 0;
}