Pagini recente » Cod sursa (job #382798) | Cod sursa (job #1721778) | Cod sursa (job #2945964) | Cod sursa (job #315531) | Cod sursa (job #3152646)
#include <bits/stdc++.h>
#define limita 45000
using namespace std;
int p, q;
bool check (unsigned long long val, unsigned long long divisor, unsigned long long exp) {
unsigned long long count, putere;
count = 0;
putere = 1;
while (putere <= val) {
putere *= divisor;
count += val / putere;
}
return (count >= exp);
}
int binary_search (int baza, int exp) {
long long left, right, mid, ans;
left = 1;
right = 1e18;
ans = 0;
while (left <= right) {
mid = (left + right) / 2;
if (check(mid, baza, exp)) {
ans = mid;
right = mid - 1;
} else
left = mid + 1;
}
return ans;
}
int main() {
ifstream cin("gfact.in");
ofstream cout("gfact.out");
int ans, exp;
cin >> p >> q;
ans = 0;
for (int baza = 2; baza * baza <= p; baza++) {
exp = 0;
while (p % baza == 0) {
exp++;
p /= baza;
}
if (exp)
ans = max(ans, binary_search(baza, q * exp));
}
if (p)
ans = max(ans, binary_search(p, q));
cout << ans;
return 0;
}