Pagini recente » Cod sursa (job #730859) | Cod sursa (job #1964791) | Cod sursa (job #360640) | Cod sursa (job #2080782) | Cod sursa (job #1378476)
#include <iostream>
#include <fstream>
#define LL long long int
using namespace std;
LL P,Q,K,f[200],p[200];
bool check(LL x){
LL i,cnt,ax;
for (i=1; i<=K; i++){
cnt=0,ax=f[i];
while (cnt<p[i] && ax<=x){
cnt+=x/ax;
ax*=f[i];
}
if (cnt<p[i]) return 0;
}
return 1;
}
int main() {
ifstream fin("gfact.in");
ofstream fout("gfact.out");
fin >> P >> Q;
LL i;
for (i=2; i*i<=P; i++)
if (P%i==0) {
f[++K]=i;
while (P%i==0) P/=i,p[K]++;
p[K]*=Q;
}
if (P!=1) f[++K]=P,p[K]=Q;
LL mid,l=1,r=(1LL<<62);
while (l<r){
mid=(l+r)/2;
if (check(mid)) r=mid;
else l=mid+1;
}
fout << r;
return 0;
}