Pagini recente » Cod sursa (job #2271693) | Cod sursa (job #996150) | Cod sursa (job #811265) | Cod sursa (job #516537) | Cod sursa (job #2426631)
#include <fstream>
using namespace std;
ifstream in ("gfact.in");
ofstream out ("gfact.out");
int v[30],putere[30],k;
void desc (long long p)
{
long long i;
for (i=2;i*i<=p;i++)
{
if (p%i==0)
{
v[++k]=i;
while (p%i==0)
putere[k]++,p/=i;
}
}
if (p>1)
v[++k]=p,putere[k]=1;
}
bool verif(long long a,long long q)
{
long long s=0,i,b;
for (i=1;i<=k;i++)
{
s=0;
b=v[i];
while (b<=a)
s+=a/b,b*=v[i];
if (s<putere[i]*q)
return 0;
}
return 1;
}
int main()
{
long long p,q,st=0,dr=10000000000,mijl,poz;
in>>p>>q;
desc(p);
while (st<=dr)
{
mijl=(st+dr)/2;
if (verif(mijl,q)==1)
dr=mijl-1,poz=mijl;
else
st=mijl+1;
}
out<<poz;
return 0;
}