Pagini recente » Cod sursa (job #2166650) | Cod sursa (job #2449131) | Cod sursa (job #2368388) | Cod sursa (job #2887224) | Cod sursa (job #1414875)
#include<cstdio>
using namespace std;
struct vi{int v,i,s;};
vi v[30];
int lag(int n,int k)
{
int s=0;
int c=k;
while(n/c>0)
{
s+=n/c;
c*=k;
}
return s;
}
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
int a,p,f,st=1,dr=2000000000,mid,i;
scanf("%d%d",&a,&p);
int ma=0,k=0;
for(i=2;i<=a;i++)
{
if(a%i==0)
{
k++;
v[k].v=1;
v[k].i=i;
}
while(a%i==0)
{
v[k].v*=i;
a/=i;
v[k].s++;
}
if(v[k].v>ma)
{
ma=v[k].v;
f=k;
}
}
while(st<dr+1)
{
mid=(st+dr)/2;
if(lag(mid,v[f].i)>v[f].s*p)
{
dr=mid-1;
}
else
{
st=mid+1;
}
}
printf("%d",mid);
return 0;
}