Cod sursa(job #806388)

Utilizator robertpoeRobert Poenaru robertpoe Data 2 noiembrie 2012 18:13:45
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include<fstream>
#define lli long long int
using namespace std;
ifstream f("gfact.in");
ofstream g("gfact.out");
lli p,q,i,j;
lli t[15],b[15];
lli sol1,sol,l,r,m,mm,pp;
lli gf(lli tt,lli bb)
{
	l=1;
	r=bb*tt;
	while(r>l+1)
	{
		m=(l+r)/2;
		mm=m;
		pp=0;
		while(mm)
		{
		    pp+=mm/tt;
		    mm/=tt;
		}
		if(pp>=bb)
            r=m;
		else
            l=m;
	}
	return r;
}
int main()
{
	f>>p>>q;
	for(i=2;;i++)
	{
	    if(i*i>p)break;
	    if(p%i==0)
	    {
	        j++;t[j]=i;
	        while(p%i==0){ b[j]++;p/=i;}
	    }
	}
	if(p>1)
	{
	    j++;
	    t[j]=p;
	    b[j]=1;
	    }
	for(i=1;i<=j;i++)
	b[i]*=q;
	for(i=1;i<=j;i++)
	{
	    sol1=gf(t[i],b[i]);
		sol=(sol>sol1)?sol:sol1;
	}
	g<<sol;
	return 0;
}