Pagini recente » Cod sursa (job #536083) | Cod sursa (job #698785) | Cod sursa (job #172187) | Cod sursa (job #2572823) | Cod sursa (job #2835415)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("gfact.in");
ofstream fout ("gfact.out");
vector < pair<long long, long long> > d;
long long p, q, e, sol;
long long power(long long fact, long long num){
long long crt = num, add, result = 0;
do{
add = fact / crt;
result += add;
crt *= num;
}while(add != 0);
return result;
}
void solve(long long num, long long put){
long long st=1, md, dr=(1LL << 60);
while(st <= dr){
md = (dr - st) / 2 + st;
if(power(md, num) >= put)
dr = md - 1;
else
st = md + 1;
}
sol = max(sol, st);
}
signed main (){
fin>>p>>q;
for(long long i=2; i<=p/i; i++){
e = 0;
while(p%i == 0){
e++;
p /= i;
}
if(e != 0)
d.push_back({i, e});
}
if(p != 1)
d.push_back({p, 1});
for(long long i=0; i < (long long)d.size(); i++){
d[i].second *= q;
solve(d[i].first, d[i].second);
}
fout<<sol;
return 0;
}