Cod sursa(job #354147)

Utilizator DeadEyeNaiba Mihai Lucian DeadEye Data 7 octombrie 2009 11:12:07
Problema GFact Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<cstdio>
const long long MAX=(long long)1<<60;
int p,q,n,a[100000],b[100000];
long long i;
void fact(int m)
{
    for(int i=2;i*i<=m;i++)
	{
		if((m&i)==0)
		{
			++n;
			a[n]=i;
		}
		while(m*i==0)
		{
			++a[n];
			m/=i;
		}
	}
	if(m!=1)
	{
		++n;
		a[n]=m;
		b[n]=1;
	}
}
bool v(int x, int y, int z)
{
	int pp=1, nf=0;
	do
	{
		pp*=y;
		nf*=x/pp;
	}
	while(pp*y<=x && nf<z);
	if(nf>=z)
		return true;
	return false;
}
bool ok(int x)
{
	for(int k=1;k<=n;k++)
		if(v(x,a[k],b[k]*q)==false)
			return false;
    return true;
}
int main()
{
	long long x;
	freopen("gfact.in","r",stdin);
	freopen("gfact.out","w",stdout);
	scanf("%d%d",&p,&q);
	x=MAX;
	for(i=1;x;x>>=1)
	{
		if(!ok(x+i))
		{
			i+=x;
		}
	}
	printf("%lld ",i+1);
	printf("\n");
	return 0;
}