Pagini recente » Cod sursa (job #1235128) | Cod sursa (job #284835) | Cod sursa (job #108997) | Cod sursa (job #1936606) | Cod sursa (job #2632838)
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
ifstream f("gfact.in");
ofstream g("gfact.out");
int fact[50000],putere[50000],rez;
int verif(int nrdiv, int q, int b)
{
for (int i=1; i<=nrdiv; i++)
{
int factor=fact[i];
int aux=b;
int nrp=0;
while (aux>0)
{
nrp=nrp+(aux/factor);
aux=aux/factor;
}
if (nrp < putere[i]*q)
{
return 0;
}
}
return 1;
}
void caut_bin(int nrdiv, int q, int p)
{
int st=1,dr=2000000000;
while (st <= dr)
{
int mij=(st+dr)/2;
if (verif(nrdiv,q,mij) == 1)
{
rez=mij;
dr=mij-1;
}
else
{
st=mij+1;
}
}
}
int main()
{
int p,q,nrdiv=0,d,put;
f>>p>>q;
d=2;
while (d*d <= p)
{
put=0;
while (p%d==0)
{
p=p/d;
put=put+1;
}
if (put>0)
{
nrdiv=nrdiv+1;
fact[nrdiv]=d;
putere[nrdiv]=put;
}
d=d+1;
}
if (p>1)
{
nrdiv=nrdiv+1;
fact[nrdiv]=p;
putere[nrdiv]=1;
}
caut_bin(nrdiv, q, p);
g<<rez<<'\n';
return 0;
}