Cod sursa(job #562248)

Utilizator crazzytudTudor Popa crazzytud Data 22 martie 2011 18:13:41
Problema GFact Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<stdio.h>
long long u,d[30],e[30],p,q;
long long nrd(long long x,long long y)
{
	long long z=0;
	while(x!=0)
	{
		z+=x/y;
		x/=y;
	}
	return z;
}

int ok(long long x)
{	
	long long i;
	for(i=1;i<=u;i++)
	{
		if(nrd(x,d[i])<e[i])
			return 0;
	}
	return 1;
}

void desc(long long n)
{
	for(long long i=2;i*i<=n;i++)
	{
		if(n%i==0)
		{
			d[++u]=i;
			e[u]=1;
			n/=i;
			while(n%i==0)
			{
				e[u]++;
				n/=i;
			}
		}
	}
	if(n!=1)
	{
		d[++u]=n;
		e[u]=1;
	}
}


long long cautbin()
{
	long long i,pas=1<<30;
	
	for(i=0;pas!=0;pas>>=1)
	{
		if(!ok(i+pas))
			i+=pas;
	}
	return i+1;
}


int main()
{
	freopen("gfact.in","r",stdin);
	freopen("gfact.out","w",stdout);
	scanf("%lld%lld",&p,&q);
	
	desc(p);
	
	for(long long i=1;i<=u;i++)
		e[i]*=q;
	
	printf("%lld",cautbin());
}