Pagini recente » Cod sursa (job #1140329) | Istoria paginii planificare/sedinta-20080303 | Cod sursa (job #1848076) | Istoria paginii utilizator/ioanalivia22 | Cod sursa (job #327614)
Cod sursa(job #327614)
#include<cstdio>
const long long N=(long long)1<<60;
int p,nr;
//struct putere{int val,p;}v[10000];
int *a[100];
int citire()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
int n;
scanf("%d%d",&n,&p);
return n;
}
void desc(int n)
{
for (int i=2; i*i<=n; ++i)
{
int putere=0;
while (n%i==0)
{
n/=i;
++putere;
}
a[++nr]=new int [2];
a[nr][0]=i;
a[nr][1]=putere*p;
/*v[++nr].val=i;
v[nr].p=putere*p;*/
}
if (n!=1)
{
a[++nr]=new int [2];
a[nr][0]=n;
a[nr][1]=p;
/*v[++nr].val=n;
v[nr].p=p;*/
}
}
bool zero(long long x)
{
for (int i=1; i<=nr; ++i)
{
long long r=0,cx=x;
while (cx)
{
//cx/=v[i].val;
cx/=a[i][0];
r+=cx;
}
if (r<a[i][1])
return false;
}
return true;
}
long long caut()
{
long long m,st=1,dr=N;
while (st!=dr)
{
m=(st+dr)>>1;
if (!zero(m))
st=m+1;
else dr=m;
}
//if (!zero(st)) return -1;
return st;
}
int main()
{
desc(citire());
printf("%lld",caut());
return 0;
}