Pagini recente » Cod sursa (job #3176281) | Cod sursa (job #327596)
Cod sursa(job #327596)
#include<cstdio>
#define N 2000000000
int n,p,nr;
struct putere{int val,p;}v[1000];
void citire()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
scanf("%d%d",&n,&p);
}
void desc()
{
for (int i=2; i<=n; ++i)
{
int putere=0;
while (n%i==0)
{
n/=i;
++putere;
}
v[++nr].val=i;
v[nr].p=putere*p;
}
if (n!=1)
{
v[++nr].val=n;
v[nr].p=p;
}
}
bool zero(int x)
{
for (int i=1; i<=nr; ++i)
{
int r=0;
int cx=x;
while (cx)
{
cx/=v[i].val;
r+=cx;
}
if (r<v[i].p)
return false;
}
return true;
}
int caut()
{
int st=1,dr=N;
while (st!=dr)
{
int m=(st+dr)>>1;
if (!zero(m))
st=m+1;
else dr=m;
}
if (!zero(st)) return -1;
return st;
}
int main()
{
citire();
desc();
printf("%d",caut());
return 0;
}