Pagini recente » Cod sursa (job #762111) | Cod sursa (job #2796103) | Cod sursa (job #987632) | Cod sursa (job #2276381) | Cod sursa (job #2314062)
#include <iostream>
#include <cstdio>
#define MAXDIV 12
using namespace std;
int d[MAXDIV+1],e[MAXDIV+1],nrdivprimi=0,p,q,n,dvz;
long long leg(int p,long long n) {
long long put=0,prod=p;
while(prod<=n) {
put+=n/prod;
prod*=p;
}
return put;
}
bool divide(long long n) {
for(int i=1;i<=nrdivprimi;i++)
if(leg(d[i],n)<e[i]*q)
return false;
return true;
}
int cautbin() {
int st=0,dr=2000000000,poz=0,mij;
while(st<=dr) {
mij=(st+dr)/2;
if(divide(mij)==1) {
poz=mij;
dr=mij-1;
}
else
st=mij+1;
}
return poz;
}
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
cin>>p>>q;
n=p;
for(dvz=2;dvz*dvz<=n;dvz++)
if(n%dvz==0) {
d[++nrdivprimi]=dvz;
while(n%dvz==0) {
e[nrdivprimi]++;
n/=dvz;
}
}
if(n>1) {
d[++nrdivprimi]=n;
e[nrdivprimi]=1;
}
/// cout<<nrdivprimi<<'\n';
cout<<cautbin();
return 0;
}