Pagini recente » Cod sursa (job #1626357) | Cod sursa (job #805679) | Cod sursa (job #1717985) | Cod sursa (job #244128) | Cod sursa (job #212489)
Cod sursa(job #212489)
#include<stdio.h>
#include<iostream.h>
#include<math.h>
long long p,q; //p^q=A
long long i,j,rad,rez,cnt;
long long putere_factorial(long long nr)
{
long long power=i, s=0;
while(nr/power > 0) s+=nr/power, power*=i;
return s;
}
long long binary_search(long long ls)
{long long li=1,m,var,sol=0;
while(li<=ls)
{
m=(li+ls)/2; var=putere_factorial(m*i);
if(var<cnt*q) { li=m+1; continue; }
if(var>=cnt*q) { sol=m*i; ls=m-1; continue; }
}
if(sol>rez) rez=sol; }
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
scanf("%lld %lld",&p,&q); rad=sqrt(p); if(p==1) rez=1;
for(i=2; i<=rad; i++)
{
if(p%i!=0) continue;
cnt=0;
while(p%i==0) p/=i, cnt++;
binary_search(cnt*q); // limita superioara
}
if(p!=1) i=p,cnt=1, binary_search(q);
printf("%lld\n",rez);
printf("\n"); return 0;
}