Cod sursa(job #212475)

Utilizator pandaemonAndrei Popescu pandaemon Data 5 octombrie 2008 17:08:53
Problema GFact Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>
#include<iostream.h>
#include<math.h>


long long p,q; //p^q=A

long long i,j,rad,rez=1,cnt;


putere_factorial(long long nr)
{
 long long power=i, s=0;

 while(nr-power > 0) s+=nr/power, power*=i;

 return s;
}



binary_search(long long ls)
{long long li=1,m,var,sol;

 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; }



main()
{
  freopen("gfact.in","r",stdin);
  freopen("gfact.out","w",stdout);

  scanf("%lld %lld",&p,&q);  rad=sqrt(p);

  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;
}