Pagini recente » Cod sursa (job #2510434) | Cod sursa (job #1474521) | Cod sursa (job #2538058) | Cod sursa (job #2670597) | 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;
}