Pagini recente » Cod sursa (job #401772) | Cod sursa (job #3159404) | Cod sursa (job #938826) | Cod sursa (job #1459922) | Cod sursa (job #2269921)
#include<fstream>
using namespace std;
ifstream cin("gfact.in");
ofstream cout("gfact.out");
const long long lim=1LL<<50;
long long div1[500],put[500],n,baza,exp;
void div1izori(long long x)
{
long int i;
for(i=2; i*i<=x; i++)
if(x%i==0)
{
n++;
div1[n]=i;
while(x%i==0)
{
x/=i;
put[n]++;
}
}
if(x!=1)
{
n++;
div1[n]=x;
put[n]=1;
}
}
long long verif(long long x)
{
long long i,k,sum;
for(i=1; i<=n; i++)
{
sum=0;
k=div1[i];
while(x/k>0)
{
sum+=x/k;
k=k*div1[i];
}
if(sum<put[i]*exp)
return 0;
}
return 1;
}
int main()
{
long long st,dr,mij,rasp=0;
cin>>baza>>exp;
div1izori(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;
}
cout<<rasp;
return 0;
}