Cod sursa(job #390702)

Utilizator joli94Apostol Adrian Alexandru joli94 Data 4 februarie 2010 13:07:33
Problema GFact Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<cstdio>
struct pereche
{
	int d,e;
};
pereche v[1<<4];
int nr,p,q;
void desc(int p)
{
	int i;
	nr=0;
	for(i=2;i*i<=p;i++)
		if(p%i == 0)
		{
			v[++nr].d=i;
			v[nr].e=0;
			while(p%i==0)
			{
				p /=i;
				v[nr].e++;
			}
		}
	if(p!=1)
	{
		v[++nr].d=p;
		v[nr].e=1;
	}
}

int func (int p,long long n)
{
	int c=0;
	while(n)
	{
		c+=n/p;
		n/=p;
	}
	return c;
}

bool ok(long long n)
{
	int i;
	for(i=1;i<=nr;i++)
		if(func(v[i].d,n)<v[i].e*q) 
			return false;
	return true;
}

long long caut()
{
	long long i,pas=(long long)1<<50;
	for(i=0; pas; pas>>=1)
	{
		if (!ok(i+pas))
			i+=pas;
	}
	return i+1;
}
int main()
{
	freopen("gfact.in","r",stdin);
	freopen("gfact.out","w",stdout);
	scanf("%d %d",&p,&q);
	desc(p);
	printf("%lld\n",caut());
	return 0;
}