Cod sursa(job #397792)

Utilizator HoriaClementHoriaC HoriaClement Data 17 februarie 2010 15:15:26
Problema GFact Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <cstdio>

int p,q;

inline bool nasol(int p1,int p2)
{
	return p2*q>p1;
}
inline int minimus(int x,int y)
{
	return x < y ? x:y;
}
int putere(int n,int p)
{
	int rez=0;
	while(n)
	{
		rez+=n/p;
		n/=p;
	}
	return rez;
}
bool desc(int x,int a)
{
	int p1,p2,min=1<<30;
	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;
}
int caut()
{
	int i,pas=1<<30;
	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("%d\n",caut());
	return 0;
}