Pagini recente » Cod sursa (job #2466142) | Cod sursa (job #1631255) | Borderou de evaluare (job #2830530) | Cod sursa (job #273073) | Cod sursa (job #721655)
Cod sursa(job #721655)
#include <iostream>
#include <string.h>
#include <math.h>
#include <fstream>
using namespace std;
int fact[64], exponent[64], nr_div;
bool corect(long long h)
{
int i;
for (i=0;i<nr_div;++i)
{
long long a = h, e = 0;
while (a >= fact[i])
{
a /= fact[i];
e += a;
}
if (e < exponent[i])
{
return false;
}
}
return true;
}
int main()
{
ifstream f("gfact.in");
ofstream g("gfact.out");
int p, q;
f>>p>>q;
for (int i = 2; i * i <= p; ++i)
if (!(p % i))
{
fact[nr_div] = i;
for ( ;!(p % i);
exponent[nr_div] += q)
p /= i;
++nr_div;
}
if (p > 1) {
fact[nr_div] = p;
exponent[nr_div] = q;
++nr_div;
}
long long start = 1, end = 2000000000ll * 30000ll, mijloc;
while(1)
{
mijloc = (st + end) / 2;
if (!corect(mijloc))
{
start = mijloc + 1;
continue;
}
if (!corect(mijloc - 1))
break;
end = mijloc - 1;
}
g<<mijloc;
f.close();
g.close();
return 0;
}