Pagini recente » Cod sursa (job #1525889) | Cod sursa (job #658817) | Cod sursa (job #1196261) | Cod sursa (job #629734) | Cod sursa (job #2828827)
#include <iostream>
#include <fstream>
#define ll long long
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
ll get_maxdiv(ll x){
ll rasp = 1, div = 2;
while(div * div <= x){
if(x % div == 0){
while(x % div == 0) x/= div;
rasp = max(rasp, div);
}
div++;
}
if(x > 1) rasp = max(rasp, x);
return rasp;
}
ll get_ap(ll n, ll d){
ll cnt = 0;
while(n % d == 0) n /= d, cnt++;
return cnt;
}
ll exponent(ll n, ll d){
ll s = 0, p = d;
while(p <= n) s += (n / p), p *= d;
return s;
}
int main(){
ll p, q;
fin >> p >> q;
ll d = get_maxdiv(p), ap = get_ap(p, d) * q;
long long st = 1, dr = (1ll << 62), ans = 0;
while(st <= dr){
ll mij = (st + dr) / 2;
if(exponent(mij, d) == ap){
ans = mij - (mij % d);
break;
}
if(exponent(mij, d) > ap) dr = mij - 1;
else st = mij + 1;
}
fout << ans;
return 0;
}