Pagini recente » Cod sursa (job #55444) | Cod sursa (job #2886306) | Cod sursa (job #2123869) | Cod sursa (job #2892613) | Cod sursa (job #2284616)
#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 n)
{
long long i, step;
for (step = 1; step < n; step <<= 1);
for (i = n; step; step >>= 1)
if (i - step < n && possible(i - step))
i -= step;
return i;
}
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(1 << 30);
return 0;
}