Cod sursa(job #331247)

Utilizator aladinaladin aladinn aladin Data 13 iulie 2009 12:29:58
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <cstdio>
#include <cmath>
#include <climits>
long long v[3000000];

long long descomp(long long x)
{long long nr=0,i;
 for (i=1;i<=v[0]&&v[i]<=x;++i)
	 nr+=x/v[i];
 return nr;
}

int main()
{long long  sol=LONG_LONG_MAX,x,y,z,w,p,q,maxdiv=0,exp,i,expp;

 freopen("gfact.in","r",stdin);
 freopen("gfact.out","w",stdout);
 scanf("%lld %lld",&p,&q);
 scanf("%lld %lld",&p,&q);
 x=1;y=p*q;
 for (i=2;i<=sqrt(p)&& p>1;i++) 
 {exp=0;
  while (p%i==0)
  {p=p/i;
   exp++;
   if (exp!=0) {maxdiv=i;expp=exp;}
  }
 }
  if (p!=1) if (p>maxdiv) {maxdiv=p;exp=1;}
  
  exp*=q;
  
  for (i=2,v[1]=maxdiv,v[0]=1;v[v[0]]*maxdiv<=y;i++)
	{v[i]=v[i-1]*maxdiv; ++v[0];}
	

  while (x<=y)
  {z=(x+y)/2;
   w=descomp(z);
   if (w<exp) x=z+1; else
	   if (w>=exp) {y=z-1;if (z<sol) sol=z;}
  }
  printf("%lld",sol);
  
 	
	  
  
  
  //printf("%d %d",maxdiv,exp);
return 0;}