Pagini recente » Cod sursa (job #1973005) | Cod sursa (job #3246187) | Cod sursa (job #1860591) | Cod sursa (job #969405) | Cod sursa (job #1760828)
#include<fstream>
using namespace std;
ifstream f("gfact.in");
ofstream g("gfact.out");
const long long lim=1LL<<60;
long long div[500],put[500],n,baza,exp;
void divizori(long long x)
{
long long i;
for(i=2;i*i<=x;i++)
if(x%i==0)
{
n++;
div[n]=i;
while(x%i==0)
{
x/=i;
put[n]++;
}
}
if(x!=1)
{
n++;
div[n]=x;
put[n]=1;
}
}
int verif(long long x)
{
long long i,k,sum;
for(i=1;i<=n;i++)
{
sum=0;
k=div[i];
while(x/k>0)
{
sum+=x/k;
k=k*div[i];
}
if(sum<put[i]*exp)
return 0;
}
return 1;
}
int main()
{
long long st,dr,mij,rasp=0;
f>>baza>>exp;
divizori(baza);
st=0;
dr=lim;
while(st<=dr)
{
mij=(st+dr)/2;
if(verif(mij)==1)
{
rasp=mij;
dr=mij-1;
}
else
st=mij+1;
}
g<<rasp;
return 0;
}