Pagini recente » Cod sursa (job #2209278) | Cod sursa (job #1992773) | Cod sursa (job #492909) | Cod sursa (job #3181511) | Cod sursa (job #2530473)
#include <fstream>
#define int long long
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
int v[31],putere[31],elem;
bool verific(int x, int q)
{
int s=0,b,i;
for(i=1; i<=elem; i++)
{
s=0;
b=v[i];
while(b<=x)
{
s+=x/b;
b*=v[i];
}
if(s<putere[i]*q)
return 0;
}
return 1;
}
int32_t main()
{
int p,q,i,mij,st=1,dr=(1LL<<50),ans;
in>>p>>q;
for(i=2; i*i<=p; i++)
{
if(p%i==0)
{
v[++elem]=i;
while(p%i==0)
{
putere[elem]++;
p/=i;
}
}
}
if(p>1)
{
v[++elem]=p;
putere[elem]=1;
}
while(st<=dr)
{
mij=(st+dr)/2;
if(verific(mij,q)==1)
{
dr=mij-1;
ans=mij;
}
else
st=mij+1;
}
out<<ans;
return 0;
}