Pagini recente » Cod sursa (job #79769) | Cod sursa (job #891353) | Cod sursa (job #736074) | Statistici Petrea Eduard-Flavius (BolovaNNN) | Cod sursa (job #157714)
Cod sursa(job #157714)
#include <stdio.h>
#define inf 1<<62
long x,y,p[15000],q,i,j,ok,nd,d[20],pd[20];
long long max,sol;
long long binary(long d,long p){
long long low=1,high=(long long)inf,mid;
long long v[65],nr;
long i,j;
v[0]=1;
i=1;
while (((long long)inf)/v[i-1]>=d){
v[i]=v[i-1]*d;
i++;
}
j=i-1;
while (low<high){
mid=(high+low)/2;
nr=0;
for (i=1;i<=j;i++)
nr+=mid/v[i];
if (nr>=p)
high=mid;
else {low=mid+1;}
}
return low;
}
int main(){
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
scanf("%ld %ld",&x,&y);
p[1]=2;
p[2]=3;
q=2;
i=5;
while (i<=50000){
ok=1;
j=1;
while (p[j]*p[j]<=i){
if (i%p[j]==0)
{ok=0;break;}
j++;
}
if (ok)p[++q]=i;
i+=2;
}
i=1;nd=0;
while (p[i]*p[i]<=x){
if (x%p[i]==0){
pd[++nd]=0;
d[nd]=p[i];
while (x%p[i]==0){
x/=p[i];
pd[nd]++;
}
}
i++;
}
if (x>1){nd++;d[nd]=x;pd[nd]=1;}
for (i=1;i<=nd;i++){
sol=binary(d[i],pd[i]*y);
if (max<sol)max=sol;
}
printf("%lld\n",max);
return 0;
}