Cod sursa(job #397805)

Utilizator HoriaClementHoriaC HoriaClement Data 17 februarie 2010 15:24:14
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <cstdio>

int p,q;

inline bool nasol(long long p1,long long p2)
{
	return p2*q>p1;
}
inline long long minimus(long long x,long long y)
{
	return x < y ? x:y;
}
long long putere(long long n,int p)
{
	long long rez=0;
	while(n)
	{
		rez+=n/p;
		n/=p;
	}
	return rez;
}
bool desc(long long x,int a)
{
	long long p1,p2;
	for(int i=2;i*i<=a;++i)
	{
		if(!(a%i))
		{
			p1=putere(x,i);
			p2=0;
			while (a%i==0)
			{
				p2++;
				a/=i;
			}
			if (nasol(p1,p2))
				return false;
		}
	}
	if(a!=1)
	{
		p1=putere(x,a);
		p2=1;
		if (nasol(p1,p2))
			return false;
	}
	return true;
}
long long caut()
{
	long long i,pas=(long long)1<<60;
	for(i=0;pas;pas>>=1)
		if(!desc(i+pas,p))
			i+=pas;
	return 1+i;
}
int main()
{
	freopen("gfact.in","r",stdin);
	freopen("gfact.out","w",stdout);
	scanf("%d%d",&p,&q);
	printf("%lld\n",caut());
	return 0;
}