Pagini recente » Cod sursa (job #1098179) | Cod sursa (job #581262) | Cod sursa (job #3273071) | Cod sursa (job #1353719) | Cod sursa (job #2024911)
#include <fstream>
using namespace std;
typedef long long int lint;
lint legendre(lint N, int p) {
lint ans = 0;
while (N) {
N /= p;
ans += N;
}
return ans;
}
int main()
{
ifstream cin("gfact.in");
ofstream cout("gfact.out");
int P, Q;
cin >> P >> Q;
if (P == 1) {
cout << "0\n";
return 0;
}
int k, l;
for (int i = 2; i * i <= P; ++ i)
if (P % i == 0) {
k = i, l = 0;
while (P % i == 0) {
P /= i;
++ l;
}
}
if (P > 1) {
k = P;
l = 1;
}
Q *= l;
lint st = 2;
lint dr = 1LL * k * Q;
lint ans = dr + 1;
while (st <= dr) {
lint mid = (st + dr) >> 1;
if (legendre(mid, k) >= Q) {
ans = mid;
dr = mid - 1;
}
else
st = mid + 1;
}
cout << ans << '\n';
return 0;
}