Pagini recente » Cod sursa (job #131734) | Cod sursa (job #734142) | Cod sursa (job #1786100) | Cod sursa (job #1138964) | Cod sursa (job #2923652)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream fin ("gfact.in");
ofstream fout ("gfact.out");
ll p, q;
vector<pair<ll, ll>>v;
void precalc (){
ll d = 2;
while (p > 1){
ll u = 0;
while (p % d == 0){
p = p / d;
u += 1;
}
if (u > 0){
v.push_back({d, q * u});
}
if (d == 2){
d += 1;
}
else{
d += 2;
}
if (d * d > p && p > 1){
d = p;
}
}
}
bool solve (ll x){
for (int i = 0; i < (int)v.size(); i++){
ll dv = v[i].first, ans = 0, y = x;
while (y > 0){
ans += y / dv;
y /= dv;
}
if (ans < v[i].second){
return false;
}
}
return true;
}
int main(){
fin >> p >> q;
precalc();
ll l = 0, r = 1e18, ans = 1e18;
while (l <= r){
ll mid = l + (r - l) / 2;
if (solve(mid)){
ans = min(ans, mid);
r = mid - 1;
}
else{
l = mid + 1;
}
}
fout << ans;
}