Pagini recente » Cod sursa (job #891847) | Cod sursa (job #1509329) | Cod sursa (job #3240916) | Cod sursa (job #330463) | Cod sursa (job #2659563)
#include <fstream>
#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=2000000000LL*30000,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;
}
ifstream fin("gfact.in");
ofstream fout("gfact.out");
int main() {
fin>>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;
}
fout<<cautbin();
return 0;
}