Pagini recente » Cod sursa (job #2834590) | Cod sursa (job #1513366) | Cod sursa (job #2632272) | Cod sursa (job #2679748) | Cod sursa (job #2149245)
#include <fstream>
#include <cmath>
#define ll long long
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
ll nrz(ll x, ll f)
{
ll s = 0;
while(x >= f) {
x /= f;
s += x;
}
return s;
}
ll caut(ll b, ll p)
{
ll st, dr, ans;
st = p * (b - 1);
dr = p * b;
while(st <= dr) {
ll m = st + (dr - st) / 2, n = nrz(m, b);
if(n >= p) {
ans = m;
dr = m - 1;
}
else
st = m + 1;
}
return ans;
}
ll descompunere(ll b, ll e)
{
ll p = 0, ans = 1;
while(!(b & 1)) {
p++;
b >>= 1;
}
if(p)
ans = max(ans, caut(2, p * e));
ll d = 3;
p = 0;
while(d * d <= b && b > 1) {
if(b % d) {
d+=2;
continue;
}
while(!(b % d)) {
p++;
b /= d;
}
ans = max(ans, caut(d, p * e));
p = 0, d += 2;
}
if(b > 1)
ans = max(ans, caut(b, e));
return ans;
}
int main()
{
ll b, e;
fin >> b >> e;
fout << descompunere(b, e);
return 0;
}