Pagini recente » Cod sursa (job #3154216) | Cod sursa (job #2807163) | Cod sursa (job #1891066) | Cod sursa (job #1536165) | Cod sursa (job #846363)
Cod sursa(job #846363)
#include <fstream>
#include <cmath>
using namespace std;
ifstream in ("gfact.in");
ofstream out ("gfact.out");
int P, Q, contor;
long long Sol;
struct factor
{
int fact, power; // fact = baza, power = exponent
}f[25];
void Desc (int nr)
{
int exp = 0;
for (int i = 2; i*i <= nr; i++)
{
if (nr % i == 0)
{
exp = 0;
while (nr % i == 0) nr /= i, ++exp;
f[++contor].fact = i, f[contor].power = exp*Q;
}
}
if (nr > 1) f[++contor].fact = nr, f[contor].power = 1*Q;
}
long long put (long long B, long long T)
{
long long put2 = 1, answer = 0;
put2 *= T;
while (B >= put2)
{
answer += B/put2;
put2 *= T;
}
return answer;
}
int check (long long b)
{
for (int i = 1; i <= contor; i++)
{
if (put(b, f[i].fact) < f[i].power) return 0;
}
return 1;
}
long long bs()
{
unsigned long long left, right, mid, last;
left = 1;
right = (unsigned long long)20000000*30000;
while (left <= right)
{
mid = left + (right-left)/2;
if (check(mid) == 0) left = mid + 1;
else {
right = mid - 1;
last = mid;} // minimul per total
}
return last;
}
int main()
{
in >> P >> Q;
Desc(P);
Sol = bs();
out << Sol;
return 0;
}