Pagini recente » Cod sursa (job #2570298) | Cod sursa (job #473078) | Cod sursa (job #1108411) | Cod sursa (job #3180583) | Cod sursa (job #2714370)
#include <fstream>
#include <climits>
using namespace std;
long long fact[25],put[25];
int main()
{
ifstream fin("gfact.in");
ofstream fout("gfact.out");
long long a,b;
fin>>a>>b;
long long d=2,cnt=0,poz=0;
while(a>1&&d*d<=a)
{
cnt=0;
while(a%d==0)
{
a/=d;
cnt++;
}
if(cnt>0)
{
fact[poz]=d;
put[poz]=cnt;
poz++;
}
d++;
}
if(a>1)
{
fact[poz]=a;
put[poz]=1;
poz++;
}
for(int i=0;i<poz;i++)
{
put[i]*=b;
}
long long st=1,dr=LLONG_MAX,put1,apar,mij,val;
double rest;
while(dr>=st)
{
mij=st+(dr-st)/2;
int ok=0;
for(int i=0;i<poz;i++)
{
apar=0;
put1=fact[i];
while(put1<=mij)
{
apar+=mij/put1;
rest=(double)mij/put1;
if(rest<fact[i])
{
break;
}
put1*=fact[i];
}
if(apar<put[i])
{
ok=1;
}
}
if(ok==0)
{
val=mij;
dr=mij-1;
}
else
{
st=mij+1;
}
}
fout<<val<<'\n';
return 0;
}