Pagini recente » Cod sursa (job #2941481) | Cod sursa (job #678878) | Cod sursa (job #130550) | Cod sursa (job #2403737) | Cod sursa (job #3321377)
#include <fstream>
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
long long p, q, divizor, pcopie, bmin, expon;
long long calc(long long b, long long d) {
long long rez=0, putere=d;
while(putere<=b) {
rez+=b/putere;
putere*=d;
}
return rez;
}
long long cautare(long long x) {
long long le, ri, mid, best=0;
le=1; ri=p*q;
while(le<=ri) {
mid=(le+ri)/2;
if(calc(mid, divizor) >= x) {
best=mid;
ri=mid-1;
}
else {
le=mid+1;
}
}
return best;
}
int main()
{
fin >> p >> q;
pcopie=p;
divizor=2;
while(pcopie>1) {
if(pcopie%divizor==0) {
expon=0;
while(pcopie%divizor==0) {
expon++;
pcopie/=divizor;
bmin=max(bmin, cautare(expon*q));
}
}
divizor++;
if(pcopie>1&&divizor*divizor>pcopie) {
divizor=pcopie;
}
}
fout << bmin;
return 0;
}