Pagini recente » Cod sursa (job #1543371) | Cod sursa (job #604620) | Cod sursa (job #2917548) | Cod sursa (job #493967) | Cod sursa (job #2387184)
#include <iostream>
#include <cstdio>
#define MAXDIV 30
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;
}
long long cautbin() {
long long 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);
scanf("%d%d",&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;
}