Pagini recente » Cod sursa (job #828805) | Cod sursa (job #2949552) | Cod sursa (job #1772268) | Cod sursa (job #761251) | Cod sursa (job #331630)
Cod sursa(job #331630)
#include<stdio.h>
#include<math.h>
int i,j,n,p,q,b,a,max,k,r;
int putere(int x,int a)
{ int rez=0;
while(a) { a/=x;
rez+=a;
}
return rez;
}
int cautbin(int lim,int t)
{
int st=1,dr=lim,mij,k,k1;
while(st<=dr) { mij=(st+dr)/2;
k=putere(t,mij*t);
k1=putere(t,(mij-1)*t);
if((k1<lim&&k>=lim)||(k>=lim&&mij==1)) return mij*t;
else if(k1<lim&&k<lim) st=mij+1;
else dr=mij-1;
}
return 0;
}
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
scanf("%d %d",&p,&q);
while(p%2==0)
{ p/=2;
r++;
}
r=cautbin(r*q,2);
if(r>max) max=r;
k=int(sqrt(p));
for(i=3;i<=k;i+=2) { r=0;
while(p%i==0) { p/=i;
r++;
}
if(r){ r=cautbin(r*q,i);
}
if(r>max) max=r;
}
if(p>1) { r=cautbin(q,p);
if(r>max) max=r;
}
printf("%d\n",max);
fclose(stdin);
fclose(stdout);
return 0;
}